Re: [patch, -rc5-mm1] lock validator: disable NMI watchdog if CONFIG_LOCKDEP, i386

Ingo Molnar
2006-05-30T19:47:32Z

* Andi Kleen <ak@suse.de> wrote:

> Ingo Molnar <mingo@elte.hu> writes:
> >
> > The NMI watchdog uses spinlocks (notifier chains, etc.),
> > so it's not lockdep-safe at the moment.
>
> That's totally unsafe even without lockdep and should be fixed
> instead. I guess someone bungled the notifier chain conversion. The
> NMI notifiers need to be lockless.

yeah, totally agreed, they need to be raw notifiers. Havent had time to
investigate it in detail yet - i went for the easier hack of disabling
NMIs while lockdep is enabled.

Here's the kernel trace of it happening on x86_64:

<...>-417 0D... 2983us : __lockdep_acquire (ffffffff81a5cb18 0 0)
<...>-417 0D... 2983us : __lockdep_acquire (0 0 0)
<...>-417 0D... 2984us : do_nmi (nmi)
<...>-417 0D.h. 2985us : default_do_nmi (do_nmi)
<...>-417 0D.h. 2986us : atomic_notifier_call_chain (default_do_nmi)
<...>-417 0D.h. 2986us : notifier_call_chain (atomic_notifier_call_chain)
<...>-417 0D.h. 2987us : nmi_watchdog_tick (default_do_nmi)
<...>-417 0D.h. 2987us : atomic_notifier_call_chain (nmi_watchdog_tick)
<...>-417 0D.h. 2987us : notifier_call_chain (atomic_notifier_call_chain)
<...>-417 0D... 2988us : trace_hardirqs_off (trace_hardirqs_off_thunk)
<...>-417 0D... 2989us : __lockdep_acquire (1 1 0)
<...>-417 0D... 2989us : mark_lock (__lockdep_acquire)
<...>-417 0D... 2989us : mark_lock (__lockdep_acquire)
<...>-417 0D... 2989us+: mark_lock (__lockdep_acquire)
<...>-417 0D... 2991us : check_chain_key (__lockdep_acquire)
<...>-417 0.... 2992us : _raw_spin_lock (_spin_lock)
<...>-417 0.... 2992us : _spin_lock (dput)

that shouldnt be an atomic_notifier but a raw_notifier.

Ingo