Re: 2.6.18-rt1

Ingo Molnar
2006-10-18T07:20:54Z

* Dipankar Sarma <dipankar@in.ibm.com> wrote:

> Sorry, I should have published my investigations long ago. I tracked
> this down (atleast the crash in my machine) to NMI interference with
> rcu_read_lock()/rcu_read_unlock(). We use those APIs from NMI context
> as well
> (default_do_nmi()->notify_die()->atomic_notifier_call_chain()).
>
> Can you try with nmi_watchdog=0 in the kernel command line ?
>
> Paul has an NMI-safe patch for rcupreempt which I am adopting and
> testing at the moment. If this works well, I will publish a new
> patchset.

spent some good time debugging this 2 weeks ago and added the fix below
to rt5, but i forgot to do the symmetric fix for x86_64...

Ingo

----------->
arch/i386/kernel/traps.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

Index: linux/arch/i386/kernel/traps.c
===================================================================
--- linux.orig/arch/i386/kernel/traps.c
+++ linux/arch/i386/kernel/traps.c
@@ -716,9 +716,6 @@ static void default_do_nmi(struct pt_reg
reason = get_nmi_reason();

if (!(reason & 0xc0)) {
- if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 2, SIGINT)
- == NOTIFY_STOP)
- return;
#ifdef CONFIG_X86_LOCAL_APIC
/*
* Ok, so this is none of the documented NMI sources,
@@ -729,6 +726,9 @@ static void default_do_nmi(struct pt_reg
return;
}
#endif
+ if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 2, SIGINT)
+ == NOTIFY_STOP)
+ return;
unknown_nmi_error(reason, regs);
return;
}