At Wed, 07 Mar 2007 11:10:59 +0100, Benjamin Herrenschmidt wrote: > > On Wed, 2007-03-07 at 10:16 +0100, Ingo Molnar wrote: > > * Tsutomu OWA <[EMAIL PROTECTED]> wrote: > > > > > @@ -342,6 +342,7 @@ static int xmon_core(struct pt_regs *reg > > > > > > msr = mfmsr(); > > > mtmsr(msr & ~MSR_EE); /* disable interrupts */ > > > + preempt_disable(); > > > > i'm not an xmon expert, but maybe it might make more sense to first > > disable preemption, then interrupts - otherwise you could be preempted > > right after having disabled these interrupts (and be scheduled to > > another CPU, etc.). What is the difference between local_irq_save() and > > the above 'disable interrupts' sequence? If it's not the same and > > xmon_core() relied on having hardirqs disabled then it might make sense > > to do a local_irq_save() there, instead of a preempt_disable(). > > powerpc 64 bits nowadays does lazy HW masking, so local_irq_disable() > will not actually switch MSR_EE off. However, xmon needs that to happen > (though we have a nicer accessor to do it, I suspect some bitrot need > fixing in there, possibly already fixed in .21) > > I agree that preempt_disable() should be put before the MSR tweaking > though.
As all of you said, I'm resending the patch here. To fix the following runtime warnings when entering xmon. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Entering xmon BUG: using smp_processor_id() in preemptible [00000000] code: khvcd/280 caller is .xmon_core+0xb8/0x8ec Call Trace: [C00000000FD737C0] [C00000000000FAAC] .show_stack+0x68/0x1b0 (unreliable) [C00000000FD73860] [C0000000001F71F0] .debug_smp_processor_id+0xc8/0xf8 [C00000000FD738F0] [C00000000004AF30] .xmon_core+0xb8/0x8ec [C00000000FD73A80] [C00000000004B918] .xmon+0x38/0x4c [C00000000FD73C60] [C00000000004BA8C] .sysrq_handle_xmon+0x48/0x5c [C00000000FD73CD0] [C000000000243A68] .__handle_sysrq+0xe0/0x1b0 [C00000000FD73D70] [C000000000244974] .hvc_poll+0x18c/0x2b4 [C00000000FD73E50] [C000000000244E80] .khvcd+0x88/0x164 [C00000000FD73EE0] [C000000000075014] .kthread+0x124/0x174 [C00000000FD73F90] [C000000000023D48] .kernel_thread+0x4c/0x68 BUG: khvcd:280 task might have lost a preemption check! Call Trace: [C00000000FD73740] [C00000000000FAAC] .show_stack+0x68/0x1b0 (unreliable) [C00000000FD737E0] [C000000000054920] .preempt_enable_no_resched+0x64/0x7c [C00000000FD73860] [C0000000001F71F8] .debug_smp_processor_id+0xd0/0xf8 [C00000000FD738F0] [C00000000004AF30] .xmon_core+0xb8/0x8ec [C00000000FD73A80] [C00000000004B918] .xmon+0x38/0x4c [C00000000FD73C60] [C00000000004BA8C] .sysrq_handle_xmon+0x48/0x5c [C00000000FD73CD0] [C000000000243A68] .__handle_sysrq+0xe0/0x1b0 [C00000000FD73D70] [C000000000244974] .hvc_poll+0x18c/0x2b4 [C00000000FD73E50] [C000000000244E80] .khvcd+0x88/0x164 [C00000000FD73EE0] [C000000000075014] .kthread+0x124/0x174 [C00000000FD73F90] [C000000000023D48] .kernel_thread+0x4c/0x68 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - thanks a lot! Signed-off-by: Tsutomu Owa <[EMAIL PROTECTED]> -- owa --- linux-rt8/arch/powerpc/xmon/xmon.c 2007-02-20 09:38:52.000000000 +0900 +++ rt/arch/powerpc/xmon/xmon.c 2007-03-07 19:49:38.000000000 +0900 @@ -340,6 +340,7 @@ static int xmon_core(struct pt_regs *reg unsigned long timeout; #endif + preempt_disable(); msr = mfmsr(); mtmsr(msr & ~MSR_EE); /* disable interrupts */ @@ -517,6 +518,7 @@ static int xmon_core(struct pt_regs *reg insert_cpu_bpts(); mtmsr(msr); /* restore interrupt enable */ + preempt_enable(); return cmd != 'X' && cmd != EOF; } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/