| 1 | From 49d07a29653b1f2c6ae273b3d8fe93d981f43004 Mon Sep 17 00:00:00 2001 |
| 2 | From: Wu Zhangjin <wuzhangjin@gmail.com> |
| 3 | Date: Wed, 12 Jan 2011 20:59:32 +0000 |
| 4 | Subject: MIPS: Kexec: Init the arguments for the new kernel image |
| 5 | |
| 6 | Whenever the kexec-tools pass the command lines to the new kernel image, |
| 7 | init the arguments as the ones for the 1st kernel image. This fixed the |
| 8 | booting failure of Kexec on YeeLoong. |
| 9 | |
| 10 | Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com> |
| 11 | --- |
| 12 | --- a/arch/mips/kernel/machine_kexec.c |
| 13 | +++ b/arch/mips/kernel/machine_kexec.c |
| 14 | @@ -10,6 +10,7 @@ |
| 15 | #include <linux/mm.h> |
| 16 | #include <linux/delay.h> |
| 17 | |
| 18 | +#include <asm/bootinfo.h> |
| 19 | #include <asm/cacheflush.h> |
| 20 | #include <asm/page.h> |
| 21 | |
| 22 | @@ -21,9 +22,30 @@ void (*relocated_kexec_smp_wait) (void * |
| 23 | atomic_t kexec_ready_to_reboot = ATOMIC_INIT(0); |
| 24 | #endif |
| 25 | |
| 26 | +static void machine_kexec_init_args(void) |
| 27 | +{ |
| 28 | + kexec_args[0] = fw_arg0; |
| 29 | + kexec_args[1] = fw_arg1; |
| 30 | + kexec_args[2] = fw_arg2; |
| 31 | + kexec_args[3] = fw_arg3; |
| 32 | + |
| 33 | + pr_info("kexec_args[0] (argc): %lu\n", kexec_args[0]); |
| 34 | + pr_info("kexec_args[1] (argv): %p\n", (void *)kexec_args[1]); |
| 35 | + pr_info("kexec_args[2] (env ): %p\n", (void *)kexec_args[2]); |
| 36 | + pr_info("kexec_args[3] (desc): %p\n", (void *)kexec_args[3]); |
| 37 | +} |
| 38 | + |
| 39 | int |
| 40 | machine_kexec_prepare(struct kimage *kimage) |
| 41 | { |
| 42 | + /* |
| 43 | + * Whenever arguments passed from kexec-tools, Init the arguments as |
| 44 | + * the original ones to avoid booting failure. |
| 45 | + * |
| 46 | + * This can be overrided by _machine_kexec_prepare(). |
| 47 | + */ |
| 48 | + machine_kexec_init_args(); |
| 49 | + |
| 50 | if (_machine_kexec_prepare) |
| 51 | return _machine_kexec_prepare(kimage); |
| 52 | return 0; |
| 53 | |