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;