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

Message ID 20230728000233.50887-1-john.ogness@linutronix.de
Headers
Series wire up nbcon consoles |

Message

John Ogness July 28, 2023, 12:02 a.m. UTC
  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@linutronix.de

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
  

Comments

Petr Mladek Aug. 11, 2023, 1:56 p.m. UTC | #1
On Fri 2023-07-28 02:08:25, John Ogness wrote:
> 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.
> 
> 
>  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 +++++++++++++++++++++++++++++++++++

Nit: Is there still any chance to rename this to kernel/printk/nbcon.c ?

I am sorry that I did not suggested this earlier. I think that
we should have omitted the "printk_" prefix even for
the "ringbuffer.*" files.

I think that it came from "printk_safe.c". But it made some sense.
"printk_safe_*" was also an API.

But in general, "printk_" prefix is superfluous in "printk" directory.

Best Regards,
Petr