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,
"Paul E. McKenney" <paulmck@kernel.org>,
"Frederic Weisbecker" <frederic@kernel.org>,
"Neeraj Upadhyay" <quic_neeraju@quicinc.com>,
"Josh Triplett" <josh@joshtriplett.org>,
"Mathieu Desnoyers" <mathieu.desnoyers@efficios.com>,
"Lai Jiangshan" <jiangshanlai@gmail.com>,
"Joel Fernandes" <joel@joelfernandes.org>,
rcu@vger.kernel.org, "Jason Wessel" <jason.wessel@windriver.com>,
"Daniel Thompson" <daniel.thompson@linaro.org>,
"Douglas Anderson" <dianders@chromium.org>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Jiri Slaby" <jirislaby@kernel.org>,
kgdb-bugreport@lists.sourceforge.net,
linux-serial@vger.kernel.org, linux-fsdevel@vger.kernel.org,
"Miguel Ojeda" <ojeda@kernel.org>,
"Richard Weinberger" <richard@nod.at>,
"Anton Ivanov" <anton.ivanov@cambridgegreys.com>,
"Johannes Berg" <johannes@sipsolutions.net>,
linux-um@lists.infradead.org,
"Luis Chamberlain" <mcgrof@kernel.org>,
"Aaron Tomlin" <atomlin@redhat.com>,
"Andy Shevchenko" <andriy.shevchenko@linux.intel.com>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
"Geert Uytterhoeven" <geert+renesas@glider.be>,
"Tony Lindgren" <tony@atomide.com>,
"Lukas Wunner" <lukas@wunner.de>,
"Geert Uytterhoeven" <geert@linux-m68k.org>,
linux-m68k@lists.linux-m68k.org,
"Ard Biesheuvel" <ardb@kernel.org>,
linux-efi@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
"Krzysztof Kozlowski" <krzysztof.kozlowski@linaro.org>,
"Alim Akhtar" <alim.akhtar@samsung.com>,
linux-arm-kernel@lists.infradead.org,
linux-samsung-soc@vger.kernel.org,
"Michal Simek" <michal.simek@xilinx.com>,
"Peter Zijlstra" <peterz@infradead.org>,
"Mathias Nyman" <mathias.nyman@linux.intel.com>,
linux-usb@vger.kernel.org,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
netdev@vger.kernel.org, "Helge Deller" <deller@gmx.de>,
"Javier Martinez Canillas" <javierm@redhat.com>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"Juergen Gross" <jgross@suse.com>,
"Boris Ostrovsky" <boris.ostrovsky@oracle.com>,
"Tom Rix" <trix@redhat.com>,
linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org
Subject: [PATCH printk v3 00/40] reduce console_lock scope
Date: Mon, 7 Nov 2022 15:21:58 +0106 [thread overview]
Message-ID: <20221107141638.3790965-1-john.ogness@linutronix.de> (raw)
This is v3 of a series to prepare for threaded/atomic
printing. v2 is here [0]. This series focuses on reducing the
scope of the BKL console_lock. It achieves this by switching to
SRCU and a dedicated mutex for console list iteration and
modification, respectively. The console_lock will no longer
offer this protection and is completely removed from
(un)register_console() and console_stop/start() code.
Also, during the review of v2 it came to our attention that
many console drivers are checking CON_ENABLED to see if they
are registered. Because this flag can change without
unregistering and because this flag does not represent an
atomic point when an (un)registration process is complete,
a new console_is_registered() function is introduced. This
function uses the console_list_lock to synchronize with the
(un)registration process to provide a reliable status.
All users of the console_lock for list iteration have been
modified. For the call sites where the console_lock is still
needed (because of other reasons), comments are added to
explain exactly why the console_lock was needed.
All users of CON_ENABLED for registration status have been
modified to use console_is_registered(). Note that there are
still users of CON_ENABLED, but this is for legitimate purposes
about a registered console being able to print.
The base commit for this series is from Paul McKenney's RCU tree
and provides an NMI-safe SRCU implementation [1]. Without the
NMI-safe SRCU implementation, this series is not less safe than
mainline. But we will need the NMI-safe SRCU implementation for
atomic consoles anyway, so we might as well get it in
now. Especially since it _does_ increase the reliability for
mainline in the panic path.
Changes since v3:
general:
- introduce a synchronized console_is_registered() to query if
a console is registered, meant to replace CON_ENABLED
(mis)use for this purpose
- directly read console->flags for registered consoles if it is
race-free (and document that it is so)
- replace uart_console_enabled() with a new
uart_console_registered() based on console_is_registered()
- change comments about why console_lock is used to synchronize
console->device() by providing an example
registration check fixups:
- the following drivers were modified to use the new
console_is_registered() instead of CON_ENABLED checks
- arch/m68k/emu/nfcon.c
- drivers/firmware/efi/earlycon.c
- drivers/net/netconsole.c
- drivers/tty/hvc/hvc_console.c
- drivers/tty/serial/8250/8250_core.c
- drivers/tty/serial/earlycon.c
- drivers/tty/serial/pic32_uart.c
- drivers/tty/serial/samsung_tty.c
- drivers/tty/serial/serial_core.c
- drivers/tty/serial/xilinx_uartps.c
- drivers/usb/early/xhci-dbc.c
um: kmsg_dumper:
- change stdout dump criteria to match original intention
kgdb/kdb:
- in configure_kgdboc(), take console_list_lock to synchronize
tty_find_polling_driver() against register_console()
- add comments explaining why calling console->write() without
locking might work
tty: sh-sci:
- use a setup() callback to setup the early console
fbdev: xen:
- implement a cleaner approach for
console_force_preferred_locked()
rcu:
- implement debug_lockdep_rcu_enabled() for
!CONFIG_DEBUG_LOCK_ALLOC
printk:
- check CONFIG_DEBUG_LOCK_ALLOC for srcu_read_lock_held()
availability
- for console_lock/_trylock/_unlock, replace "lock the console
system" language with "block the console subsystem from
printing"
- use WRITE_ONCE() for updating console->flags of registered
consoles
- expand comments of synchronize_srcu() calls to explain why
they are needed, and also expand comments to explain when it
is not needed
- change CON_BOOT consoles to always begin at earliest message
- for non-BOOT/non-PRINTBUFFER consoles, initialize @seq to the
minimal @seq of any of the enabled boot consoles
- add comments and lockdep assertion to
unregister_console_locked() because it is not clear from the
name which lock is implied
- dropped patches that caused unnecessary churn in the series
John Ogness
[0] https://lore.kernel.org/lkml/20221019145600.1282823-1-john.ogness@linutronix.de
[1] https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git/log/?h=srcunmisafe.2022.10.21a
John Ogness (38):
rcu: implement lockdep_rcu_enabled for !CONFIG_DEBUG_LOCK_ALLOC
printk: Prepare for SRCU console list protection
printk: fix setting first seq for consoles
um: kmsg_dump: only dump when no output console available
console: introduce console_is_enabled() wrapper
printk: use console_is_enabled()
um: kmsg_dump: use console_is_enabled()
kdb: kdb_io: use console_is_enabled()
um: kmsg_dumper: use srcu console list iterator
tty: serial: kgdboc: document console_lock usage
tty: tty_io: document console_lock usage
proc: consoles: document console_lock usage
kdb: use srcu console list iterator
printk: console_flush_all: use srcu console list iterator
printk: console_unblank: use srcu console list iterator
printk: console_flush_on_panic: use srcu console list iterator
printk: console_device: use srcu console list iterator
printk: __pr_flush: use srcu console list iterator
printk: introduce console_list_lock
console: introduce console_is_registered()
serial_core: replace uart_console_enabled() with
uart_console_registered()
tty: nfcon: use console_is_registered()
efi: earlycon: use console_is_registered()
tty: hvc: use console_is_registered()
tty: serial: earlycon: use console_is_registered()
tty: serial: pic32_uart: use console_is_registered()
tty: serial: samsung_tty: use console_is_registered()
tty: serial: xilinx_uartps: use console_is_registered()
usb: early: xhci-dbc: use console_is_registered()
netconsole: avoid CON_ENABLED misuse to track registration
printk, xen: fbfront: create/use safe function for forcing preferred
tty: tty_io: use console_list_lock for list synchronization
proc: consoles: use console_list_lock for list iteration
tty: serial: kgdboc: use console_list_lock for list traversal
tty: serial: kgdboc: synchronize tty_find_polling_driver() and
register_console()
tty: serial: kgdboc: use console_list_lock to trap exit
printk: relieve console_lock of list synchronization duties
tty: serial: sh-sci: use setup() callback for early console
Thomas Gleixner (2):
serial: kgdboc: Lock console list in probe function
printk: Convert console_drivers list to hlist
.clang-format | 1 +
arch/m68k/emu/nfcon.c | 10 +-
arch/um/kernel/kmsg_dump.c | 24 +-
drivers/firmware/efi/earlycon.c | 8 +-
drivers/net/netconsole.c | 21 +-
drivers/tty/hvc/hvc_console.c | 4 +-
drivers/tty/serial/8250/8250_core.c | 2 +-
drivers/tty/serial/earlycon.c | 4 +-
drivers/tty/serial/kgdboc.c | 46 ++-
drivers/tty/serial/pic32_uart.c | 4 +-
drivers/tty/serial/samsung_tty.c | 2 +-
drivers/tty/serial/serial_core.c | 14 +-
drivers/tty/serial/sh-sci.c | 17 +-
drivers/tty/serial/xilinx_uartps.c | 2 +-
drivers/tty/tty_io.c | 18 +-
drivers/usb/early/xhci-dbc.c | 2 +-
drivers/video/fbdev/xen-fbfront.c | 12 +-
fs/proc/consoles.c | 21 +-
include/linux/console.h | 111 +++++++-
include/linux/rcupdate.h | 5 +
include/linux/serial_core.h | 15 +-
kernel/debug/kdb/kdb_io.c | 14 +-
kernel/printk/printk.c | 424 +++++++++++++++++++++-------
23 files changed, 605 insertions(+), 176 deletions(-)
base-commit: e29a4915db1480f96e0bc2e928699d086a71f43c
--
2.30.2
next reply other threads:[~2022-11-07 14:17 UTC|newest]
Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-07 14:15 John Ogness [this message]
2022-11-07 14:15 ` [PATCH printk v3 01/40] rcu: implement lockdep_rcu_enabled for !CONFIG_DEBUG_LOCK_ALLOC John Ogness
2022-11-07 18:01 ` Paul E. McKenney
2022-11-07 19:23 ` John Ogness
2022-11-08 19:27 ` Paul E. McKenney
2022-11-09 17:49 ` Paul E. McKenney
2022-11-08 10:29 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 02/40] serial: kgdboc: Lock console list in probe function John Ogness
2022-11-09 8:20 ` Daniel Thompson
2022-11-07 14:16 ` [PATCH printk v3 03/40] printk: Convert console_drivers list to hlist John Ogness
2022-11-07 14:16 ` [PATCH printk v3 04/40] printk: Prepare for SRCU console list protection John Ogness
2022-11-08 12:14 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 05/40] printk: fix setting first seq for consoles John Ogness
2022-11-08 12:20 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 06/40] um: kmsg_dump: only dump when no output console available John Ogness
2022-11-08 12:41 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 07/40] console: introduce console_is_enabled() wrapper John Ogness
2022-11-08 16:18 ` Petr Mladek
2022-11-10 15:05 ` John Ogness
2022-11-11 13:32 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 08/40] printk: use console_is_enabled() John Ogness
2022-11-08 17:40 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 09/40] um: kmsg_dump: " John Ogness
2022-11-09 14:52 ` Petr Mladek
2022-11-09 14:56 ` Petr Mladek
2022-11-09 14:57 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 10/40] kdb: kdb_io: " John Ogness
2022-11-09 8:22 ` Daniel Thompson
2022-11-09 14:59 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 11/40] um: kmsg_dumper: use srcu console list iterator John Ogness
2022-11-09 15:05 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 12/40] tty: serial: kgdboc: document console_lock usage John Ogness
2022-11-09 8:23 ` Daniel Thompson
2022-11-09 15:19 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 13/40] tty: tty_io: " John Ogness
2022-11-09 15:20 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 14/40] proc: consoles: " John Ogness
2022-11-09 15:22 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 15/40] kdb: use srcu console list iterator John Ogness
2022-11-09 8:53 ` Daniel Thompson
2022-11-09 9:27 ` John Ogness
2022-11-09 15:27 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 16/40] printk: console_flush_all: " John Ogness
2022-11-07 14:16 ` [PATCH printk v3 17/40] printk: console_unblank: " John Ogness
2022-11-07 14:16 ` [PATCH printk v3 18/40] printk: console_flush_on_panic: " John Ogness
2022-11-07 14:16 ` [PATCH printk v3 19/40] printk: console_device: " John Ogness
2022-11-09 15:58 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 20/40] printk: __pr_flush: " John Ogness
2022-11-07 14:16 ` [PATCH printk v3 21/40] printk: introduce console_list_lock John Ogness
2022-11-10 12:58 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 22/40] console: introduce console_is_registered() John Ogness
2022-11-10 13:00 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 23/40] serial_core: replace uart_console_enabled() with uart_console_registered() John Ogness
2022-11-08 8:46 ` Geert Uytterhoeven
2022-11-10 13:24 ` Petr Mladek
2022-11-10 13:46 ` John Ogness
2022-11-07 14:16 ` [PATCH printk v3 24/40] tty: nfcon: use console_is_registered() John Ogness
2022-11-08 8:39 ` Geert Uytterhoeven
2022-11-10 13:58 ` Petr Mladek
2022-11-10 14:19 ` John Ogness
2022-11-10 17:50 ` Eero Tamminen
2022-11-07 14:16 ` [PATCH printk v3 25/40] efi: earlycon: " John Ogness
2022-11-10 14:28 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 26/40] tty: hvc: " John Ogness
2022-11-10 14:52 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 27/40] tty: serial: earlycon: " John Ogness
2022-11-10 15:00 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 28/40] tty: serial: pic32_uart: " John Ogness
2022-11-10 15:01 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 29/40] tty: serial: samsung_tty: " John Ogness
2022-11-10 15:01 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 30/40] tty: serial: xilinx_uartps: " John Ogness
2022-11-10 15:04 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 31/40] usb: early: xhci-dbc: " John Ogness
2022-11-10 15:05 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 32/40] netconsole: avoid CON_ENABLED misuse to track registration John Ogness
2022-11-10 15:17 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 33/40] printk, xen: fbfront: create/use safe function for forcing preferred John Ogness
2022-11-10 15:34 ` Petr Mladek
2022-11-10 16:03 ` John Ogness
2022-11-10 17:26 ` Petr Mladek
2022-11-10 22:37 ` John Ogness
2022-11-11 10:48 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 34/40] tty: tty_io: use console_list_lock for list synchronization John Ogness
2022-11-07 14:16 ` [PATCH printk v3 35/40] proc: consoles: use console_list_lock for list iteration John Ogness
2022-11-07 14:16 ` [PATCH printk v3 36/40] tty: serial: kgdboc: use console_list_lock for list traversal John Ogness
2022-11-09 9:06 ` Daniel Thompson
2022-11-09 9:44 ` John Ogness
2022-11-10 18:00 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 37/40] tty: serial: kgdboc: synchronize tty_find_polling_driver() and register_console() John Ogness
2022-11-10 15:13 ` Daniel Thompson
2022-11-10 18:03 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 38/40] tty: serial: kgdboc: use console_list_lock to trap exit John Ogness
2022-11-10 15:18 ` Daniel Thompson
2022-11-11 9:59 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 39/40] printk: relieve console_lock of list synchronization duties John Ogness
2022-11-07 16:30 ` John Ogness
2022-11-11 10:27 ` Petr Mladek
2022-11-11 13:06 ` Petr Mladek
2022-11-07 14:16 ` [PATCH printk v3 40/40] tty: serial: sh-sci: use setup() callback for early console John Ogness
2022-11-08 8:53 ` Geert Uytterhoeven
2022-11-11 17:15 ` Petr Mladek
2022-11-11 14:43 ` [PATCH printk v3 00/40] reduce console_lock scope Mathieu Desnoyers
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=20221107141638.3790965-1-john.ogness@linutronix.de \
--to=john.ogness@linutronix.de \
--cc=alim.akhtar@samsung.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=anton.ivanov@cambridgegreys.com \
--cc=ardb@kernel.org \
--cc=atomlin@redhat.com \
--cc=boris.ostrovsky@oracle.com \
--cc=daniel.thompson@linaro.org \
--cc=davem@davemloft.net \
--cc=deller@gmx.de \
--cc=dianders@chromium.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=edumazet@google.com \
--cc=frederic@kernel.org \
--cc=geert+renesas@glider.be \
--cc=geert@linux-m68k.org \
--cc=gregkh@linuxfoundation.org \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=jason.wessel@windriver.com \
--cc=javierm@redhat.com \
--cc=jgross@suse.com \
--cc=jiangshanlai@gmail.com \
--cc=jirislaby@kernel.org \
--cc=joel@joelfernandes.org \
--cc=johannes@sipsolutions.net \
--cc=josh@joshtriplett.org \
--cc=kgdb-bugreport@lists.sourceforge.net \
--cc=krzysztof.kozlowski@linaro.org \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-efi@vger.kernel.org \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=linux-um@lists.infradead.org \
--cc=linux-usb@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lukas@wunner.de \
--cc=mathias.nyman@linux.intel.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mcgrof@kernel.org \
--cc=michal.simek@xilinx.com \
--cc=netdev@vger.kernel.org \
--cc=ojeda@kernel.org \
--cc=pabeni@redhat.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=pmladek@suse.com \
--cc=quic_neeraju@quicinc.com \
--cc=rcu@vger.kernel.org \
--cc=richard@nod.at \
--cc=rostedt@goodmis.org \
--cc=senozhatsky@chromium.org \
--cc=tglx@linutronix.de \
--cc=tony@atomide.com \
--cc=trix@redhat.com \
--cc=tzimmermann@suse.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;
as well as URLs for NNTP newsgroup(s).