mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: John Ogness <john.ogness@linutronix.de>
To: Petr Mladek <pmladek@suse.com>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH printk v2 2/5] printk: Add NMI safety to console_flush_on_panic() and console_unblank()
Date: Wed, 12 Jul 2023 23:17:49 +0206	[thread overview]
Message-ID: <878rbkrg16.fsf@jogness.linutronix.de> (raw)
In-Reply-To: <ZK14p-ocWuuHkSAQ@alley>

On 2023-07-11, Petr Mladek <pmladek@suse.com> wrote:
> Just to be sure. The semaphore is not NMI safe because even the
> trylock takes an internal spin lock. Am I right, please?

Yes, that is one of the reasons. Sergey mentioned another (waking a task
on up()).

> Alternative solution would be to make down_trylock() NMI safe
> by using raw_spin_trylock_irqsave() for the internal lock.

NMI contexts are only allowed to take raw spinlocks if those spinlocks
are only used from NMI context. Otherwise you could have deadlock:

raw_spin_lock()
--- NMI ---
raw_spin_lock()

Using a trylock does not avoid the deadlock danger.

> Another question is whether we want to call c->unblank()
> in NMI even when down_trylock() was NMI safe. It seems that it
> is implemented only for struct console vt_console_driver.
> I am pretty sure that it takes more internal locks which
> are not NMI safe either.

Yes, it does. As an example, it calls mod_timer(), which is also not NMI
safe. Clearly the unblank() callback must not be called in NMI context.

> Finally, it is not only about NMI. Any locks might cause a deadlock
> in panic() in any context. It is because other CPUs are stopped
> and might block some locks.

With the atomic/threaded model this is not true. The port ownership can
be safely taken over from stopped CPUs.

> In my opinion, we should handle c->unblank() in panic() the same way
> as c->write() in panic().

I do not agree. Clearly unblank() is not NMI safe. Also, in current
mainline code, console_unblank() will already give up if the trylock
failed (rather than ignoring the lock, like write() does). So
console_unblank() might as well also give up if in NMI context.

John

  parent reply	other threads:[~2023-07-12 21:13 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-10 13:45 [PATCH printk v2 0/5] various cleanups John Ogness
2023-07-10 13:45 ` [PATCH printk v2 1/5] kdb: do not assume write() callback available John Ogness
2023-07-11  0:25   ` Sergey Senozhatsky
2023-07-11  8:23   ` Daniel Thompson
2023-07-11  8:58     ` John Ogness
2023-07-11  9:01       ` Daniel Thompson
2023-07-10 13:45 ` [PATCH printk v2 2/5] printk: Add NMI safety to console_flush_on_panic() and console_unblank() John Ogness
2023-07-11 15:43   ` Petr Mladek
2023-07-11 16:07     ` Sergey Senozhatsky
2023-07-12 21:11     ` John Ogness [this message]
2023-07-13 14:43       ` Petr Mladek
2023-07-14  4:00         ` Sergey Senozhatsky
2023-07-14  9:41           ` Petr Mladek
2023-07-10 13:45 ` [PATCH printk v2 3/5] printk: Consolidate console deferred printing John Ogness
2023-07-11 15:17   ` Sergey Senozhatsky
2023-07-13 14:51   ` Petr Mladek
2023-07-10 13:45 ` [PATCH printk v2 4/5] printk: Add per-console suspended state John Ogness
2023-07-11 15:08   ` Sergey Senozhatsky
2023-07-11 15:23     ` John Ogness
2023-07-11 15:26       ` Sergey Senozhatsky
2023-07-11 15:30   ` Sergey Senozhatsky
2023-07-13 15:53   ` Petr Mladek
2023-07-10 13:45 ` [PATCH printk v2 5/5] printk: Rename abandon_console_lock_in_panic() to other_cpu_in_panic() John Ogness
2023-07-11  0:22   ` Sergey Senozhatsky
2023-07-13 15:55   ` Petr Mladek

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=878rbkrg16.fsf@jogness.linutronix.de \
    --to=john.ogness@linutronix.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pmladek@suse.com \
    --cc=rostedt@goodmis.org \
    --cc=senozhatsky@chromium.org \
    --cc=tglx@linutronix.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome