slb_flush_and_rebolt panic trace in 2.6.12-rc2-mm3

Anton Blanchard anton at samba.org
Wed Apr 13 14:33:57 EST 2005


Hi,

> Hello, I was trying to boot the latest kernel version, 2.6.12-rc2-mm3
> on a p630 box, and found the kernel throwing up this call trace after
> boot. It does come down to the login prompt, but keeps throwing out
> the below call trace when you attempt to do any operations on the box.

The new irqs on scheduling path looks to have caused this. We cannot
call switch_slb with interrupts off. This patch should fix it.

Anton

--

Disable interrupts around switch_slb, required now generic code calls it
with interrupts on.

Signed-off-by: Anton Blanchard <anton at samba.org>

===== include/asm-ppc64/mmu_context.h 1.23 vs edited =====
--- 1.23/include/asm-ppc64/mmu_context.h	2005-01-26 08:50:16 +11:00
+++ edited/include/asm-ppc64/mmu_context.h	2005-04-13 14:29:28 +10:00
@@ -51,6 +51,8 @@
 static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 			     struct task_struct *tsk)
 {
+	unsigned long flags;
+
 	if (!cpu_isset(smp_processor_id(), next->cpu_vm_mask))
 		cpu_set(smp_processor_id(), next->cpu_vm_mask);
 
@@ -58,6 +60,8 @@
 	if (prev == next)
 		return;
 
+	local_irq_save(flags);
+
 #ifdef CONFIG_ALTIVEC
 	if (cur_cpu_spec->cpu_features & CPU_FTR_ALTIVEC)
 		asm volatile ("dssall");
@@ -67,6 +71,8 @@
 		switch_slb(tsk, next);
 	else
 		switch_stab(tsk, next);
+
+	local_irq_restore(flags);
 }
 
 #define deactivate_mm(tsk,mm)	do { } while (0)



More information about the Linuxppc64-dev mailing list