--- a/arch/mips/kernel/machine_kexec.c
+++ b/arch/mips/kernel/machine_kexec.c
-@@ -23,67 +23,104 @@ void (*relocated_kexec_smp_wait) (void *
+@@ -25,67 +25,104 @@ void (*relocated_kexec_smp_wait) (void *
atomic_t kexec_ready_to_reboot = ATOMIC_INIT(0);
#endif
+#define KEXEC_MIPS_ARGV_MAX_ARGS (COMMAND_LINE_SIZE / 15)
+
+char kexec_argv_buf[KEXEC_MIPS_ARGV_BUF_SIZE] __kexec;
-+int kexec_argv[KEXEC_MIPS_ARGV_MAX_ARGS] __kexec;
++char *kexec_argv[KEXEC_MIPS_ARGV_MAX_ARGS] __kexec;
+
+static void
+machine_kexec_print_args(void)
+ size = KEXEC_MIPS_ARGV_BUF_SIZE - 1;
+ size = min(size, bufsz);
+ if (size < bufsz)
-+ pr_warn("kexec command line truncated to %d bytes\n", size);
++ pr_warn("kexec command line truncated to %zd bytes\n", size);
+
+ /* Copy to kernel space */
+ copy_from_user(kexec_argv_buf, buf, size);
+ continue;
}
+
-+ kexec_argv[argc++] = (int) ptr;
++ kexec_argv[argc++] = ptr;
+ ptr = strchr(ptr, ' ');
}
- return 0;
+ kexec_args[0] = argc;
-+ kexec_args[1] = (int) kexec_argv;
++ kexec_args[1] = (unsigned long)kexec_argv;
+ kexec_args[2] = 0;
+ kexec_args[3] = 0;
+
}
int
-@@ -95,8 +132,14 @@ machine_kexec_prepare(struct kimage *kim
+@@ -97,8 +134,14 @@ machine_kexec_prepare(struct kimage *kim
*
* This can be overrided by _machine_kexec_prepare().
*/
if (_machine_kexec_prepare)
return _machine_kexec_prepare(kimage);
-@@ -152,11 +195,13 @@ machine_kexec(struct kimage *image)
+@@ -154,11 +197,13 @@ machine_kexec(struct kimage *image)
pr_info("kexec_indirection_page = %p\n",
(void *)kexec_indirection_page);