>
> * Andrew Morton <akpm@linux-foundation.org> wrote:
>
> > I can't work out who called panic(), nor why.
> >
> > The panic code called the kexec code which called mutex_trylock()
> > which called spin_lock_mutex() which then stupidly went and blurted a
> > load of debug stuff because of in_interrupt().
>
> agreed - applied your fix in the form below to tip/master - thanks
> Andrew.
>
> J, you might want to try tip/master, it includes all known fixes for
> this area and this debug improvement as well. You can pick it up via:
>
>
http://people.redhat.com/mingo/tip.git/README
>
> Ingo
>
> ---------->
> >From 53b9d87f41a3d8838210ad7cdef02d814817ce85 Mon Sep 17 00:00:00 2001
> From: Andrew Morton <akpm@linux-foundation.org>
> Date: Thu, 11 Sep 2008 17:02:58 -0700
> Subject: [PATCH] lock debug: sit tight when we are already in a panic
>
> in:
>
> >
http://bugzilla.kernel.org/show_bug.cgi?id=11543
>
> The panic code called the kexec code which called mutex_trylock() which
> called spin_lock_mutex() which then stupidly went and blurted a load of
> debug stuff because of in_interrupt().
>
> Keep the lock debug code from escallating an already crappy situation.
>
> Signed-off-by: Ingo Molnar <mingo@elte.hu>
> ---
> include/linux/debug_locks.h | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/include/linux/debug_locks.h b/include/linux/debug_locks.h
> index 4aaa4af..096476f 100644
> --- a/include/linux/debug_locks.h
> +++ b/include/linux/debug_locks.h
> @@ -17,7 +17,7 @@ extern int debug_locks_off(void);
> ({ \
> int __ret = 0; \
> \
> - if (unlikely(c)) { \
> + if (!oops_in_progress && unlikely(c)) { \
> if (debug_locks_off() && !debug_locks_silent) \
> WARN_ON(1); \
> __ret = 1; \