[linux-yocto] [PATCH 50/70] kexec/44x: avoid cpu spin code flushed by new kernel

Paul Butler butler.paul at gmail.com
Mon Jun 10 18:46:13 PDT 2013


From: yhe <yongli.he at windriver.com>

kexec secondary kernel run at same address with old one.
let cpu spin in data segment to avoid it's flushed while
copy the new kernel.

Signed-off-by: Yongli He <yongli.he at windriver.com>
---
 arch/powerpc/kernel/head_44x.S     | 7 +++++++
 arch/powerpc/platforms/44x/acpx1.c | 3 ++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/kernel/head_44x.S b/arch/powerpc/kernel/head_44x.S
index a211fe2..697c30b 100644
--- a/arch/powerpc/kernel/head_44x.S
+++ b/arch/powerpc/kernel/head_44x.S
@@ -1299,6 +1299,13 @@ swapper_pg_dir:
 	.space	PGD_TABLE_SIZE
 
 /*
+ * KEXEC secondary kernel will run at same address as old one
+ * spin in data segment avoid it's flushed by new kernel
+ */
+_GLOBAL(kexec_smp_wait)
+	b .
+
+/*
  * Room for two PTE pointers, usually the kernel and current user pointers
  * to their respective root page table.
  */
diff --git a/arch/powerpc/platforms/44x/acpx1.c b/arch/powerpc/platforms/44x/acpx1.c
index b698275..b903787 100644
--- a/arch/powerpc/platforms/44x/acpx1.c
+++ b/arch/powerpc/platforms/44x/acpx1.c
@@ -90,13 +90,14 @@ static void __init acpx14xx_init_irq(void)
 #ifdef CONFIG_SMP
 #ifdef CONFIG_KEXEC
 atomic_t kexec_down_cpus = ATOMIC_INIT(0);
+extern void kexec_smp_wait(void);
 void smp_acpx14xx_kexec_cpu_down(int crash_shutdown, int secondary)
 {
 	local_irq_disable();
 
 	if (secondary) {
 		atomic_inc(&kexec_down_cpus);
-		while (1);
+		kexec_smp_wait();
 	}
 }
 
-- 
1.8.3




More information about the linux-yocto mailing list