Blame SOURCES/kexec-tools-2.0.8-arm64-kdump-Add-support-for-binary-image.patch

de80c6
From 047240d34ad6080c794386cc0cd3e4f6b321acc8 Mon Sep 17 00:00:00 2001
de80c6
Message-Id: <047240d34ad6080c794386cc0cd3e4f6b321acc8.1429703426.git.panand@redhat.com>
de80c6
In-Reply-To: <de1db775d6e9b51f014442677863b57b8566c510.1429703426.git.panand@redhat.com>
de80c6
References: <de1db775d6e9b51f014442677863b57b8566c510.1429703426.git.panand@redhat.com>
de80c6
From: Pratyush Anand <panand@redhat.com>
de80c6
Date: Tue, 21 Apr 2015 18:23:38 +0530
de80c6
Subject: [PATCH 14/15] arm64: kdump: Add support for binary image
de80c6
de80c6
This patch adds support to use binary image ie arch/arm64/boot/Image
de80c6
with kdump.
de80c6
de80c6
Signed-off-by: Pratyush Anand <panand@redhat.com>
de80c6
---
de80c6
 kexec/arch/arm64/kexec-image-arm64.c | 24 ++++++++++++++++++------
de80c6
 1 file changed, 18 insertions(+), 6 deletions(-)
de80c6
de80c6
diff --git a/kexec/arch/arm64/kexec-image-arm64.c b/kexec/arch/arm64/kexec-image-arm64.c
de80c6
index a52ef8ea7309..1f5395bdfabf 100644
de80c6
--- a/kexec/arch/arm64/kexec-image-arm64.c
de80c6
+++ b/kexec/arch/arm64/kexec-image-arm64.c
de80c6
@@ -10,6 +10,7 @@
de80c6
 #include <libfdt.h>
de80c6
 #include <stdlib.h>
de80c6
 
de80c6
+#include "crashdump-arm64.h"
de80c6
 #include "dt-ops.h"
de80c6
 #include "image-header.h"
de80c6
 #include "kexec-arm64.h"
de80c6
@@ -96,13 +97,23 @@ int image_arm64_load(int argc, char **argv, const char *kernel_buf,
de80c6
 
de80c6
 	arm64_mem.page_offset = get_kernel_page_offset();
de80c6
 
de80c6
-	result = parse_iomem_single("Kernel code\n", &start, NULL);
de80c6
+	if (info->kexec_flags & KEXEC_ON_CRASH) {
de80c6
+		result = load_crashdump_segments(info, &header_option);
de80c6
 
de80c6
-	if (result) {
de80c6
-		fprintf(stderr, "kexec: Could not get kernel code address.\n");
de80c6
-		return -1;
de80c6
+		if (result) {
de80c6
+			fprintf(stderr, "kexec: load crashdump segments failed.\n");
de80c6
+			return -1;
de80c6
+		}
de80c6
+		start = crash_reserved_mem.start;
de80c6
+	} else {
de80c6
+		result = parse_iomem_single("Kernel code\n", &start, NULL);
de80c6
+
de80c6
+		if (result) {
de80c6
+			fprintf(stderr, "kexec: Could not get kernel code address.\n");
de80c6
+			return -1;
de80c6
+		}
de80c6
+		start -= arm64_mem.text_offset;
de80c6
 	}
de80c6
-	start -= arm64_mem.text_offset;
de80c6
 
de80c6
 	/* Add kernel */
de80c6
 	add_segment_phys_virt(info, kernel_buf, kernel_size,
de80c6
@@ -111,7 +122,8 @@ int image_arm64_load(int argc, char **argv, const char *kernel_buf,
de80c6
 
de80c6
 	info->entry = (void *)start + arm64_mem.text_offset;
de80c6
 
de80c6
-	result = arm64_load_other_segments(info, (unsigned long)info->entry);
de80c6
+	result = arm64_load_other_segments(info, (unsigned long)info->entry,
de80c6
+		header_option);
de80c6
 
de80c6
 	if (header_option)
de80c6
 		free(header_option);
de80c6
-- 
de80c6
2.1.0
de80c6