All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
To: Petr Mladek <pmladek@suse.com>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
	Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Jan Kara <jack@suse.cz>, Peter Zijlstra <peterz@infradead.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Ingo Molnar <mingo@redhat.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] printk/nmi: restore printk_func in nmi_panic
Date: Mon, 29 Feb 2016 20:19:37 +0900	[thread overview]
Message-ID: <20160229111937.GA356@swordfish> (raw)
In-Reply-To: <20160229103141.GL3305@pathway.suse.cz>

On (02/29/16 11:31), Petr Mladek wrote:
> > > > diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> > > > index f4fa2b2..3ee33d5 100644
> > > > --- a/include/linux/kernel.h
> > > > +++ b/include/linux/kernel.h
> > > > @@ -469,10 +469,12 @@ do {									\
> > > >  	cpu = raw_smp_processor_id();					\
> > > >  	old_cpu = atomic_cmpxchg(&panic_cpu, PANIC_CPU_INVALID, cpu);	\
> > > >  									\
> > > > -	if (old_cpu == PANIC_CPU_INVALID)				\
> > > > +	if (old_cpu == PANIC_CPU_INVALID) {				\
> > > > +		printk_nmi_exit();					\
> > > 
> > > This might end up in a deadlock that printk_nmi() wanted to avoid.
> > 
> > aha, I see.
> > 
> > > I think about a compromise. We should try to get the messages
> > > out only when kdump is not enabled.
> > 
> > can we zap_locks() if we are on nmi_panic()->panic()->console_flush_on_panic() path?
> 
> That is the problem. zap_locks() is not a solution.
> 
> First, it handles only lockbuf_lock and console_sem. There are other
> locks used by particular consoles that might cause a deadlock.

yes, well, that's true for panic() in general. we can't take care of
all of the locks that possibly could have been in busy state at the
time CPU received STOP_IPI or entered panic(). we can't even safely
iterate all of the consoles and call ->reset() on them (provided that
such struct console callback will ever be implemented) because
smp_send_stop() is free to leave some CPUs online.


> Second, re-initializing locks is dangerous of its own. If they are
> released by some other CPU that is still running, you might end up
> in a deadlock because of a double release. In fact, I think that it
> actually increases the risk. If there are more than 2 CPUs than
> it is more likely that a printk is running on another CPU than
> on the current one.

panic calls debug_locks_off(), so chances *seem* to be lower.

hm... we are (sort of) on the safe side if we know that smp_send_stop() has
stopped all the CPUs but panic cpu; so zap_locks() is safe (to some extent of
course) when we know that num_online_cpus() == 1 in console_flush_on_panic().

	-ss

  reply	other threads:[~2016-02-29 11:18 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-26  3:37 [PATCH] printk/nmi: restore printk_func in nmi_panic Sergey Senozhatsky
2016-02-26 14:57 ` Petr Mladek
2016-02-27  2:19   ` Sergey Senozhatsky
2016-02-27  3:09     ` Sergey Senozhatsky
2016-02-27  3:33       ` Sergey Senozhatsky
2016-02-28  3:52         ` Sergey Senozhatsky
2016-02-29 10:31     ` Petr Mladek
2016-02-29 11:19       ` Sergey Senozhatsky [this message]
2016-03-01  9:24         ` Sergey Senozhatsky
2016-03-01 11:05           ` Petr Mladek
2016-03-01 13:14             ` Sergey Senozhatsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160229111937.GA356@swordfish \
    --to=sergey.senozhatsky.work@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=jack@suse.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=pmladek@suse.com \
    --cc=rostedt@goodmis.org \
    --cc=sergey.senozhatsky@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.