• Daniel Vetter's avatar
    tty/vt: Add console_lock check to vt_console_print() · b74dbbe1
    Daniel Vetter authored
    I'm scratching my head why we have this printing_lock. Digging through
    historical git trees shows that:
    - Added in 1.1.73, and I found absolutely no reason why.
    - Converted to atomic bitops in 2.1.125pre2, I guess as part of SMP
      enabling/bugfixes.
    - Converted to a proper spinlock in b0940003 ("vt: bitlock fix")
      because the hand-rolled atomic version lacked necessary memory
      barriers.
    
    Digging around in lore for that time period did also not shed further
    light.
    
    The only reason I think this might still be relevant today is that (to
    my understanding at least, ymmv) during an oops we might be printing
    without console_lock held. See console_flush_on_panic() and the
    comments in there - we flush out the console buffers irrespective of
    whether we managed to acquire the right locks.
    
    The strange thing is that this reason is fairly recent, because the
    console flushing was historically done without oops_in_progress set.
    This only changed in c7c3f05e ("panic: avoid deadlocks in
    re-entrant console drivers"), which removed the call to
    bust_spinlocks(0) (which decrements oops_in_progress again) before
    flushing out the console (which back then was open coded as a
    console_trylock/unlock pair).
    
    Note that this entire mess should be properly fixed in the
    printk/console layer, and not inflicted on each implementation.
    
    For now just document what's going on and check that in all other
    cases callers obey the locking rules.
    
    v2: WARN_CONSOLE_UNLOCKED already checks for oops_in_progress
    (something else that should be fixed I guess), hence remove the
    open-coded check I've had.
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Jiri Slaby <jirislaby@kernel.org>
    Cc: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Xuezhi Zhang <zhangxuezhi1@coolpad.com>
    Cc: Yangxi Xiang <xyangxi5@gmail.com>
    Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Cc: nick black <dankamongmen@gmail.com>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: Sergey Senozhatsky <senozhatsky@chromium.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: John Ogness <john.ogness@linutronix.de>
    Reviewed-by: default avatarSam Ravnborg <sam@ravnborg.org>
    Link: https://lore.kernel.org/r/20220830144945.430528-1-daniel.vetter@ffwll.chSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    b74dbbe1
vt.c 114 KB