generic: fix build failure in MIPS kexec code if SMP is enabled

Fix it for older kernels as well.

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 35366
This commit is contained in:
Gabor Juhos 2013-01-29 09:44:58 +00:00
parent 22ce389e6a
commit e252a1492c
8 changed files with 28 additions and 32 deletions

View file

@ -57,20 +57,18 @@ Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
extern int (*_machine_kexec_prepare)(struct kimage *); extern int (*_machine_kexec_prepare)(struct kimage *);
--- a/arch/mips/kernel/machine_kexec.c --- a/arch/mips/kernel/machine_kexec.c
+++ b/arch/mips/kernel/machine_kexec.c +++ b/arch/mips/kernel/machine_kexec.c
@@ -13,12 +13,6 @@ @@ -14,10 +14,6 @@
#include <asm/cacheflush.h>
#include <asm/page.h> #include <asm/page.h>
-extern const unsigned char relocate_new_kernel[]; extern const unsigned char relocate_new_kernel[];
-extern const size_t relocate_new_kernel_size; -extern const size_t relocate_new_kernel_size;
- -
-extern unsigned long kexec_start_address; -extern unsigned long kexec_start_address;
-extern unsigned long kexec_indirection_page; -extern unsigned long kexec_indirection_page;
-
int (*_machine_kexec_prepare)(struct kimage *) = NULL; int (*_machine_kexec_prepare)(struct kimage *) = NULL;
void (*_machine_kexec_shutdown)(void) = NULL; void (*_machine_kexec_shutdown)(void) = NULL;
void (*_machine_crash_shutdown)(struct pt_regs *regs) = NULL; @@ -61,21 +57,34 @@ typedef void (*noretfun_t)(void) __attri
@@ -61,21 +55,34 @@ typedef void (*noretfun_t)(void) __attri
void void
machine_kexec(struct kimage *image) machine_kexec(struct kimage *image)
{ {
@ -107,7 +105,7 @@ Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
/* /*
* The generic kexec code builds a page list with physical * The generic kexec code builds a page list with physical
@@ -96,8 +103,8 @@ machine_kexec(struct kimage *image) @@ -96,8 +105,8 @@ machine_kexec(struct kimage *image)
*/ */
local_irq_disable(); local_irq_disable();
@ -118,7 +116,7 @@ Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
__flush_cache_all(); __flush_cache_all();
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
/* All secondary cpus now may jump to kexec_wait cycle */ /* All secondary cpus now may jump to kexec_wait cycle */
@@ -108,4 +115,3 @@ machine_kexec(struct kimage *image) @@ -108,4 +117,3 @@ machine_kexec(struct kimage *image)
#endif #endif
((noretfun_t) reboot_code_buffer)(); ((noretfun_t) reboot_code_buffer)();
} }

View file

@ -19,7 +19,7 @@ Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/page.h> #include <asm/page.h>
@@ -21,9 +22,30 @@ void (*relocated_kexec_smp_wait) (void * @@ -23,9 +24,30 @@ void (*relocated_kexec_smp_wait) (void *
atomic_t kexec_ready_to_reboot = ATOMIC_INIT(0); atomic_t kexec_ready_to_reboot = ATOMIC_INIT(0);
#endif #endif

View file

@ -19,9 +19,9 @@ Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
#include <asm/page.h> #include <asm/page.h>
+#include <asm/uaccess.h> +#include <asm/uaccess.h>
int (*_machine_kexec_prepare)(struct kimage *) = NULL; extern const unsigned char relocate_new_kernel[];
void (*_machine_kexec_shutdown)(void) = NULL;
@@ -35,6 +36,56 @@ static void machine_kexec_init_args(void @@ -37,6 +38,56 @@ static void machine_kexec_init_args(void
pr_info("kexec_args[3] (desc): %p\n", (void *)kexec_args[3]); pr_info("kexec_args[3] (desc): %p\n", (void *)kexec_args[3]);
} }
@ -78,7 +78,7 @@ Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
int int
machine_kexec_prepare(struct kimage *kimage) machine_kexec_prepare(struct kimage *kimage)
{ {
@@ -45,6 +96,7 @@ machine_kexec_prepare(struct kimage *kim @@ -47,6 +98,7 @@ machine_kexec_prepare(struct kimage *kim
* This can be overrided by _machine_kexec_prepare(). * This can be overrided by _machine_kexec_prepare().
*/ */
machine_kexec_init_args(); machine_kexec_init_args();

View file

@ -1,6 +1,6 @@
--- a/arch/mips/kernel/machine_kexec.c --- a/arch/mips/kernel/machine_kexec.c
+++ b/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); atomic_t kexec_ready_to_reboot = ATOMIC_INIT(0);
#endif #endif
@ -151,7 +151,7 @@
} }
int 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(). * This can be overrided by _machine_kexec_prepare().
*/ */
@ -168,7 +168,7 @@
if (_machine_kexec_prepare) if (_machine_kexec_prepare)
return _machine_kexec_prepare(kimage); 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", pr_info("kexec_indirection_page = %p\n",
(void *)kexec_indirection_page); (void *)kexec_indirection_page);

View file

@ -57,20 +57,18 @@ Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
extern int (*_machine_kexec_prepare)(struct kimage *); extern int (*_machine_kexec_prepare)(struct kimage *);
--- a/arch/mips/kernel/machine_kexec.c --- a/arch/mips/kernel/machine_kexec.c
+++ b/arch/mips/kernel/machine_kexec.c +++ b/arch/mips/kernel/machine_kexec.c
@@ -13,12 +13,6 @@ @@ -14,10 +14,6 @@
#include <asm/cacheflush.h>
#include <asm/page.h> #include <asm/page.h>
-extern const unsigned char relocate_new_kernel[]; extern const unsigned char relocate_new_kernel[];
-extern const size_t relocate_new_kernel_size; -extern const size_t relocate_new_kernel_size;
- -
-extern unsigned long kexec_start_address; -extern unsigned long kexec_start_address;
-extern unsigned long kexec_indirection_page; -extern unsigned long kexec_indirection_page;
-
int (*_machine_kexec_prepare)(struct kimage *) = NULL; int (*_machine_kexec_prepare)(struct kimage *) = NULL;
void (*_machine_kexec_shutdown)(void) = NULL; void (*_machine_kexec_shutdown)(void) = NULL;
void (*_machine_crash_shutdown)(struct pt_regs *regs) = NULL; @@ -61,21 +57,34 @@ typedef void (*noretfun_t)(void) __attri
@@ -61,21 +55,34 @@ typedef void (*noretfun_t)(void) __attri
void void
machine_kexec(struct kimage *image) machine_kexec(struct kimage *image)
{ {
@ -107,7 +105,7 @@ Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
/* /*
* The generic kexec code builds a page list with physical * The generic kexec code builds a page list with physical
@@ -96,8 +103,8 @@ machine_kexec(struct kimage *image) @@ -96,8 +105,8 @@ machine_kexec(struct kimage *image)
*/ */
local_irq_disable(); local_irq_disable();
@ -118,7 +116,7 @@ Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
__flush_cache_all(); __flush_cache_all();
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
/* All secondary cpus now may jump to kexec_wait cycle */ /* All secondary cpus now may jump to kexec_wait cycle */
@@ -108,4 +115,3 @@ machine_kexec(struct kimage *image) @@ -108,4 +117,3 @@ machine_kexec(struct kimage *image)
#endif #endif
((noretfun_t) reboot_code_buffer)(); ((noretfun_t) reboot_code_buffer)();
} }

View file

@ -19,7 +19,7 @@ Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/page.h> #include <asm/page.h>
@@ -21,9 +22,30 @@ void (*relocated_kexec_smp_wait) (void * @@ -23,9 +24,30 @@ void (*relocated_kexec_smp_wait) (void *
atomic_t kexec_ready_to_reboot = ATOMIC_INIT(0); atomic_t kexec_ready_to_reboot = ATOMIC_INIT(0);
#endif #endif

View file

@ -19,9 +19,9 @@ Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
#include <asm/page.h> #include <asm/page.h>
+#include <asm/uaccess.h> +#include <asm/uaccess.h>
int (*_machine_kexec_prepare)(struct kimage *) = NULL; extern const unsigned char relocate_new_kernel[];
void (*_machine_kexec_shutdown)(void) = NULL;
@@ -35,6 +36,56 @@ static void machine_kexec_init_args(void @@ -37,6 +38,56 @@ static void machine_kexec_init_args(void
pr_info("kexec_args[3] (desc): %p\n", (void *)kexec_args[3]); pr_info("kexec_args[3] (desc): %p\n", (void *)kexec_args[3]);
} }
@ -78,7 +78,7 @@ Signed-off-by: Wu Zhangjin <wuzhangjin@gmail.com>
int int
machine_kexec_prepare(struct kimage *kimage) machine_kexec_prepare(struct kimage *kimage)
{ {
@@ -45,6 +96,7 @@ machine_kexec_prepare(struct kimage *kim @@ -47,6 +98,7 @@ machine_kexec_prepare(struct kimage *kim
* This can be overrided by _machine_kexec_prepare(). * This can be overrided by _machine_kexec_prepare().
*/ */
machine_kexec_init_args(); machine_kexec_init_args();

View file

@ -1,6 +1,6 @@
--- a/arch/mips/kernel/machine_kexec.c --- a/arch/mips/kernel/machine_kexec.c
+++ b/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); atomic_t kexec_ready_to_reboot = ATOMIC_INIT(0);
#endif #endif
@ -151,7 +151,7 @@
} }
int 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(). * This can be overrided by _machine_kexec_prepare().
*/ */
@ -168,7 +168,7 @@
if (_machine_kexec_prepare) if (_machine_kexec_prepare)
return _machine_kexec_prepare(kimage); 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", pr_info("kexec_indirection_page = %p\n",
(void *)kexec_indirection_page); (void *)kexec_indirection_page);