• Daniel Vetter's avatar
    kernel/panic: Drop unblank_screen call · 0a64ce6e
    Daniel Vetter authored
    console_unblank() does this too (called in both places right after),
    and with a lot more confidence inspiring approach to locking.
    
    Reconstructing this story is very strange:
    
    In b61312d3 ("oops handling: ensure that any oops is flushed to
    the mtdoops console") it is claimed that a printk(" "); flushed out
    the console buffer, which was removed in e3e8a75d ("[PATCH]
    Extract and use wake_up_klogd()"). In todays kernels this is done way
    earlier in console_flush_on_panic with some really nasty tricks. I
    didn't bother to fully reconstruct this all, least because the call to
    bust_spinlock(0); gets moved every few years, depending upon how the
    wind blows (or well, who screamed loudest about the various issue each
    call site caused).
    
    Before that commit the only calls to console_unblank() where in s390
    arch code.
    
    The other side here is the console->unblank callback, which was
    introduced in 2.1.31 for the vt driver. Which predates the
    console_unblank() function by a lot, which was added (without users)
    in 2.4.14.3. So pretty much impossible to guess at any motivation
    here. Also afaict the vt driver is the only (and always was the only)
    console driver implementing the unblank callback, so no idea why a
    call to console_unblank() was added for the mtdooops driver - the
    action actually flushing out the console buffers is done from
    console_unlock() only.
    
    Note that as prep for the s390 users the locking was adjusted in
    2.5.22 (I couldn't figure out how to properly reference the BK commit
    from the historical git trees) from a normal semaphore to a trylock.
    
    Note that a copy of the direct unblank_screen() call was added to
    panic() in c7c3f05e ("panic: avoid deadlocks in re-entrant console
    drivers"), which partially inlined the bust_spinlocks(0); call.
    
    Long story short, I have no idea why the direct call to unblank_screen
    survived for so long (the infrastructure to do it properly existed for
    years), nor why it wasn't removed when the console_unblank() call was
    finally added. But it makes a ton more sense to finally do that than
    not - it's just better encapsulation to go through the console
    functions instead of doing a direct call, so let's dare. Plus it
    really does not make much sense to call the only unblank
    implementation there is twice, once without, and once with appropriate
    locking.
    
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Jiri Slaby <jirislaby@kernel.org>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
    Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Cc: Xuezhi Zhang <zhangxuezhi1@coolpad.com>
    Cc: Yangxi Xiang <xyangxi5@gmail.com>
    Cc: nick black <dankamongmen@gmail.com>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Luis Chamberlain <mcgrof@kernel.org>
    Cc: "Guilherme G. Piccoli" <gpiccoli@igalia.com>
    Cc: Marco Elver <elver@google.com>
    Cc: John Ogness <john.ogness@linutronix.de>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: David Gow <davidgow@google.com>
    Cc: tangmeng <tangmeng@uniontech.com>
    Cc: Tiezhu Yang <yangtiezhu@loongson.cn>
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: default avatarPetr Mladek <pmladek@suse.com>
    Acked-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Link: https://lore.kernel.org/r/20220830145004.430545-1-daniel.vetter@ffwll.chSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    0a64ce6e
vt.c 114 KB