diff options
Diffstat (limited to 'target/linux/generic/patches-3.7/332-mips-kexec-init-the-arguments-for-the-new-kernel-image.patch')
-rw-r--r-- | target/linux/generic/patches-3.7/332-mips-kexec-init-the-arguments-for-the-new-kernel-image.patch | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/target/linux/generic/patches-3.7/332-mips-kexec-init-the-arguments-for-the-new-kernel-image.patch b/target/linux/generic/patches-3.7/332-mips-kexec-init-the-arguments-for-the-new-kernel-image.patch new file mode 100644 index 000000000..5507dde64 --- /dev/null +++ b/target/linux/generic/patches-3.7/332-mips-kexec-init-the-arguments-for-the-new-kernel-image.patch @@ -0,0 +1,52 @@ +From 49d07a29653b1f2c6ae273b3d8fe93d981f43004 Mon Sep 17 00:00:00 2001 +From: Wu Zhangjin <wuzhangjin@gmail.com> +Date: Wed, 12 Jan 2011 20:59:32 +0000 +Subject: MIPS: Kexec: Init the arguments for the new kernel image + +Whenever the kexec-tools pass the command lines to the new kernel image, +init the arguments as the ones for the 1st kernel image. This fixed the +booting failure of Kexec on YeeLoong. + +Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com> +--- +--- a/arch/mips/kernel/machine_kexec.c ++++ b/arch/mips/kernel/machine_kexec.c +@@ -10,6 +10,7 @@ + #include <linux/mm.h> + #include <linux/delay.h> + ++#include <asm/bootinfo.h> + #include <asm/cacheflush.h> + #include <asm/page.h> + +@@ -21,9 +22,30 @@ void (*relocated_kexec_smp_wait) (void * + atomic_t kexec_ready_to_reboot = ATOMIC_INIT(0); + #endif + ++static void machine_kexec_init_args(void) ++{ ++ kexec_args[0] = fw_arg0; ++ kexec_args[1] = fw_arg1; ++ kexec_args[2] = fw_arg2; ++ kexec_args[3] = fw_arg3; ++ ++ pr_info("kexec_args[0] (argc): %lu\n", kexec_args[0]); ++ pr_info("kexec_args[1] (argv): %p\n", (void *)kexec_args[1]); ++ pr_info("kexec_args[2] (env ): %p\n", (void *)kexec_args[2]); ++ pr_info("kexec_args[3] (desc): %p\n", (void *)kexec_args[3]); ++} ++ + int + machine_kexec_prepare(struct kimage *kimage) + { ++ /* ++ * Whenever arguments passed from kexec-tools, Init the arguments as ++ * the original ones to avoid booting failure. ++ * ++ * This can be overrided by _machine_kexec_prepare(). ++ */ ++ machine_kexec_init_args(); ++ + if (_machine_kexec_prepare) + return _machine_kexec_prepare(kimage); + return 0; |