|
|
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 |
|