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:
parent
22ce389e6a
commit
e252a1492c
8 changed files with 28 additions and 32 deletions
|
@ -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)();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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)();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue