Blame SOURCES/kexec-tools-2.0.8-arm64-kdump-append-kdump-specific-parameter-to-comma.patch

de80c6
From 0c21e6f64bf6cb6620042a66fd7df547f8c5db15 Mon Sep 17 00:00:00 2001
de80c6
Message-Id: <0c21e6f64bf6cb6620042a66fd7df547f8c5db15.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: AKASHI Takahiro <takahiro.akashi@linaro.org>
de80c6
Date: Tue, 24 Feb 2015 16:46:35 +0900
de80c6
Subject: [PATCH 09/15] arm64: kdump: append kdump-specific parameter to
de80c6
 command line
de80c6
de80c6
---
de80c6
 kexec/arch/arm64/kexec-arm64.c     | 9 +++++++--
de80c6
 kexec/arch/arm64/kexec-arm64.h     | 2 +-
de80c6
 kexec/arch/arm64/kexec-elf-arm64.c | 3 ++-
de80c6
 3 files changed, 10 insertions(+), 4 deletions(-)
de80c6
de80c6
diff --git a/kexec/arch/arm64/kexec-arm64.c b/kexec/arch/arm64/kexec-arm64.c
de80c6
index e83e83bdd6db..173631c66951 100644
de80c6
--- a/kexec/arch/arm64/kexec-arm64.c
de80c6
+++ b/kexec/arch/arm64/kexec-arm64.c
de80c6
@@ -586,7 +586,7 @@ static uint64_t read_sink(const char *command_line)
de80c6
  */
de80c6
 
de80c6
 int arm64_load_other_segments(struct kexec_info *info,
de80c6
-	unsigned long kernel_entry)
de80c6
+	unsigned long kernel_entry, char *option)
de80c6
 {
de80c6
 	int result;
de80c6
 	struct mem_ehdr ehdr;
de80c6
@@ -599,14 +599,19 @@ int arm64_load_other_segments(struct kexec_info *info,
de80c6
 	struct dtb dtb_2 = {.name = "dtb_2"};
de80c6
 	char command_line[COMMAND_LINE_SIZE] = "";
de80c6
 
de80c6
+	dbgprintf("%s:%d: add '%s' to command line\n", __func__, __LINE__,
de80c6
+		option);
de80c6
+
de80c6
 	if (arm64_opts.command_line) {
de80c6
 		strncpy(command_line, arm64_opts.command_line,
de80c6
 			sizeof(command_line));
de80c6
 		command_line[sizeof(command_line) - 1] = 0;
de80c6
 	}
de80c6
 
de80c6
-	purgatory_sink = read_sink(command_line);
de80c6
+	if (option && option[0])
de80c6
+		strcat(command_line, option);
de80c6
 
de80c6
+	purgatory_sink = read_sink(command_line);
de80c6
 	dbgprintf("%s:%d: purgatory sink: 0x%" PRIx64 "\n", __func__, __LINE__,
de80c6
 		purgatory_sink);
de80c6
 
de80c6
diff --git a/kexec/arch/arm64/kexec-arm64.h b/kexec/arch/arm64/kexec-arm64.h
de80c6
index 7f0ca13fec11..7e4d0568bd01 100644
de80c6
--- a/kexec/arch/arm64/kexec-arm64.h
de80c6
+++ b/kexec/arch/arm64/kexec-arm64.h
de80c6
@@ -48,6 +48,6 @@ extern struct arm64_mem arm64_mem;
de80c6
 
de80c6
 int arm64_process_image_header(const struct arm64_image_header *h);
de80c6
 int arm64_load_other_segments(struct kexec_info *info,
de80c6
-	unsigned long kernel_entry);
de80c6
+	unsigned long kernel_entry, char *option);
de80c6
 
de80c6
 #endif
de80c6
diff --git a/kexec/arch/arm64/kexec-elf-arm64.c b/kexec/arch/arm64/kexec-elf-arm64.c
de80c6
index 903602985eb4..f5ecda825278 100644
de80c6
--- a/kexec/arch/arm64/kexec-elf-arm64.c
de80c6
+++ b/kexec/arch/arm64/kexec-elf-arm64.c
de80c6
@@ -123,7 +123,8 @@ int elf_arm64_load(int argc, char **argv, const char *kernel_buf,
de80c6
 	dbgprintf("%s: e_entry:     %016llx -> %016lx\n", __func__,
de80c6
 		ehdr.e_entry, virt_to_phys(ehdr.e_entry));
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
 exit:
de80c6
 	free_elf_info(&ehdr);
de80c6
 	if (header_option)
de80c6
-- 
de80c6
2.1.0
de80c6