• Guilherme G. Piccoli's avatar
    s390/consoles: improve panic notifiers reliability · 4ae46db9
    Guilherme G. Piccoli authored
    Currently many console drivers for s390 rely on panic/reboot notifiers
    to invoke callbacks on these events. The panic() function disables local
    IRQs, secondary CPUs and preemption, so callbacks invoked on panic are
    effectively running in atomic context.
    
    Happens that most of these console callbacks from s390 doesn't take the
    proper care with regards to atomic context, like taking spinlocks that
    might be taken in other function/CPU and hence will cause a lockup
    situation.
    
    The goal for this patch is to improve the notifiers reliability, acting
    on 4 console drivers, as detailed below:
    
    (1) con3215: changed a regular spinlock to the trylock alternative.
    
    (2) con3270: also changed a regular spinlock to its trylock counterpart,
    but here we also have another problem: raw3270_activate_view() takes a
    different spinlock. So, we worked a helper to validate if this other lock
    is safe to acquire, and if so, raw3270_activate_view() should be safe.
    
    Notice though that there is a functional change here: it's now possible
    to continue the notifier code [reaching con3270_wait_write() and
    con3270_rebuild_update()] without executing raw3270_activate_view().
    
    (3) sclp: a global lock is used heavily in the functions called from
    the notifier, so we added a check here - if the lock is taken already,
    we just bail-out, preventing the lockup.
    
    (4) sclp_vt220: same as (3), a lock validation was added to prevent the
    potential lockup problem.
    
    Besides (1)-(4), we also removed useless void functions, adding the
    code called from the notifier inside its own body, and changed the
    priority of such notifiers to execute late, since they are "heavyweight"
    for the panic environment, so we aim to reduce risks here.
    Changed return values to NOTIFY_DONE as well, the standard one.
    Signed-off-by: default avatarGuilherme G. Piccoli <gpiccoli@igalia.com>
    Link: https://lore.kernel.org/r/20220427224924.592546-14-gpiccoli@igalia.comSigned-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
    4ae46db9
con3215.c 27.7 KB