lkml.org 
[lkml]   [2022]   [Nov]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH printk v5 00/40] reduce console_lock scope
    Date
    This is v5 of a series to prepare for threaded/atomic
    printing. v4 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.

    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 (for other reasons), comments are added to explain
    exactly why the console_lock is 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 v4:

    printk:

    - Introduce console_init_seq() to handle the now rather complex
    procedure to find an appropriate start sequence number for a
    new console upon registration.

    - When registering a non-boot console and boot consoles are
    registered, try to flush all the consoles to get the next @seq
    value before falling back to use the @seq of the enabled boot
    console that is furthest behind.

    - For console_force_preferred_locked(), make the console the
    head of the console list.

    John Ogness

    [0] https://lore.kernel.org/lkml/20221114162932.141883-1-john.ogness@linutronix.de
    [1] https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git/log/?h=srcunmisafe.2022.11.09a

    John Ogness (38):
    printk: Prepare for SRCU console list protection
    printk: register_console: use "registered" for variable names
    printk: move @seq initialization to helper
    printk: fix setting first seq for consoles
    um: kmsg_dump: only dump when no output console available
    tty: serial: kgdboc: document console_lock usage
    tty: tty_io: document console_lock usage
    proc: consoles: document console_lock usage
    printk: introduce console_list_lock
    console: introduce wrappers to read/write console flags
    um: kmsg_dumper: use srcu console list iterator
    kdb: use srcu console list iterator
    printk: console_flush_all: use srcu console list iterator
    printk: __pr_flush: use srcu console list iterator
    printk: console_is_usable: use console_srcu_read_flags
    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
    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 srcu console list iterator
    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 | 9 +-
    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 | 20 +-
    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 | 129 +++++++-
    include/linux/serial_core.h | 10 +-
    kernel/debug/kdb/kdb_io.c | 18 +-
    kernel/printk/printk.c | 493 +++++++++++++++++++++-------
    22 files changed, 680 insertions(+), 184 deletions(-)


    base-commit: f733615e39aa2d6ddeef33b7b2c9aa6a5a2c2785
    --
    2.30.2

    \
     
     \ /
      Last update: 2022-11-16 17:22    [W:4.164 / U:0.140 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site