[PATCH printk v2 0/8] wire up nbcon consoles

From: John Ogness
Date: Thu Jul 27 2023 - 20:02:50 EST


Hi,

This is v2 of a series to introduce the new non-BKL (nbcon)
consoles. This series is only a subset of the original
v1 [0]. In particular, this series represents patches 5-10 of
the v1 series. For information about the motivation of the
atomic consoles, please read the cover letter of v1.

This series focuses on wiring up the printk subsystem to
be able to use the nbcon consoles and implement their ownership
interfaces and rules. This series does _not_ include threaded
printing, atomic printing regions, or nbcon drivers. Those
features will be added in separate follow-up series.

There is not much that has _not_ changed since v1. Here is an
attempt to list the changes:

- new naming:
OLD NEW
bkl legacy
nobkl nbcon
CON_NO_BKL CON_NBCON
cons_() nbcon_()

- rather than allocating context objects per-cpu, per-prio, and
per-console, require the context object to sit on the stack

- serialize nbcon consoles with the console_lock until there
are no more boot consoles registered

- update @have_boot_console and @have_legacy_console on
unregister_console()

- only use @nbcon_seq for the nbcon sequence counter

- avoid console lock in __pr_flush() if there are only nbcon
consoles

- use only 1 state variable instead of CUR and REQ states

- replace saved states in the context with boolean flags

- use atomic long for nbcon_seq, expanded as needed on 32bit
systems

- instead of the owner performing the handover, now the owner
gives up ownership and the waiter takes ownership

- remove unnecessary state and context fields

- simplify sequence tracking by only allowing incrementing
(positive) updates

- simplify buffer handling by only allowing hostile takeovers
in the single panic context

- remove early buffer handling because there is no early window

- carefully consider individual state bits rather than
performing general set compares

- split the code for various locking strategies based on
complete methods rather than functional pieces

John Ogness

[0] https://lore.kernel.org/lkml/20230302195618.156940-1-john.ogness@xxxxxxxxxxxxx

John Ogness (1):
printk: Provide debug_store() for nbcon debugging

Thomas Gleixner (7):
printk: Add non-BKL (nbcon) console basic infrastructure
printk: nbcon: Add acquire/release logic
printk: nbcon: Add buffer management
printk: nbcon: Add sequence handling
printk: nbcon: Add ownership state functions
printk: nbcon: Add emit function and callback function for atomic
printing
printk: nbcon: Add functions for drivers to mark unsafe regions

include/linux/console.h | 132 +++++
kernel/printk/Makefile | 2 +-
kernel/printk/internal.h | 29 ++
kernel/printk/printk.c | 156 ++++--
kernel/printk/printk_nbcon.c | 955 +++++++++++++++++++++++++++++++++++
5 files changed, 1243 insertions(+), 31 deletions(-)
create mode 100644 kernel/printk/printk_nbcon.c


base-commit: 132a90d1527fedba2d95085c951ccf00dbbebe41
--
2.39.2