• Nathan Lynch's avatar
    powerpc/rtas: upgrade internal arch spinlocks · 12fd6665
    Nathan Lynch authored
    At the time commit f97bb36f ("powerpc/rtas: Turn rtas lock into a
    raw spinlock") was written, the spinlock lockup detection code called
    __delay(), which will not make progress if the timebase is not
    advancing. Since the interprocessor timebase synchronization sequence
    for chrp, cell, and some now-unsupported Power models can temporarily
    freeze the timebase through an RTAS function (freeze-time-base), the
    lock that serializes most RTAS calls was converted to arch_spinlock_t
    to prevent kernel hangs in the lockup detection code.
    
    However, commit bc88c10d
    
     ("locking/spinlock/debug: Remove spinlock
    lockup detection code") removed that inconvenient property from the
    lock debug code several years ago. So now it should be safe to
    reintroduce generic locks into the RTAS support code, primarily to
    increase lockdep coverage.
    
    Making rtas_lock a spinlock_t would violate lock type nesting rules
    because it can be acquired while holding raw locks, e.g. pci_lock and
    irq_desc->lock. So convert it to raw_spinlock_t. There's no apparent
    reason not to upgrade timebase_lock as well.
    Signed-off-by: default avatarNathan Lynch <nathanl@linux.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20230124140448.45938-5-nathanl@linux.ibm.com
    12fd6665
rtas.c 36.6 KB