• John Ogness's avatar
    printk: nbcon: Rely on kthreads for normal operation · 13189fa7
    John Ogness authored
    Once the kthread is running and available
    (i.e. @printk_kthreads_running is set), the kthread becomes
    responsible for flushing any pending messages which are added
    in NBCON_PRIO_NORMAL context. Namely the legacy
    console_flush_all() and device_release() no longer flush the
    console. And nbcon_atomic_flush_pending() used by
    nbcon_cpu_emergency_exit() no longer flushes messages added
    after the emergency messages.
    
    The console context is safe when used by the kthread only when
    one of the following conditions are true:
    
      1. Other caller acquires the console context with
         NBCON_PRIO_NORMAL with preemption disabled. It will
         release the context before rescheduling.
    
      2. Other caller acquires the console context with
         NBCON_PRIO_NORMAL under the device_lock.
    
      3. The kthread is the only context which acquires the console
         with NBCON_PRIO_NORMAL.
    
    This is satisfied for all atomic printing call sites:
    
    nbcon_legacy_emit_next_record() (#1)
    
    nbcon_atomic_flush_pending_con() (#1)
    
    nbcon_device_release() (#2)
    
    It is even double guaranteed when @printk_kthreads_running
    is set because then _only_ the kthread will print for
    NBCON_PRIO_NORMAL. (#3)
    Signed-off-by: default avatarJohn Ogness <john.ogness@linutronix.de>
    Reviewed-by: default avatarPetr Mladek <pmladek@suse.com>
    Link: https://lore.kernel.org/r/20240904120536.115780-10-john.ogness@linutronix.deSigned-off-by: default avatarPetr Mladek <pmladek@suse.com>
    13189fa7
printk.c 125 KB