• Helge Deller's avatar
    parisc: Fix lightweight spinlock checks to not break futexes · a0f4b787
    Helge Deller authored
    The lightweight spinlock checks verify that a spinlock has either value
    0 (spinlock locked) and that not any other bits than in
    __ARCH_SPIN_LOCK_UNLOCKED_VAL is set.
    
    This breaks the current LWS code, which writes the address of the lock
    into the lock word to unlock it, which was an optimization to save one
    assembler instruction.
    
    Fix it by making spinlock_types.h accessible for asm code, change the
    LWS spinlock-unlocking code to write __ARCH_SPIN_LOCK_UNLOCKED_VAL into
    the lock word, and add some missing lightweight spinlock checks to the
    LWS path. Finally, make the spinlock checks dependend on DEBUG_KERNEL.
    Noticed-by: default avatarJohn David Anglin <dave.anglin@bell.net>
    Signed-off-by: default avatarHelge Deller <deller@gmx.de>
    Tested-by: default avatarJohn David Anglin <dave.anglin@bell.net>
    Cc: stable@vger.kernel.org # v6.4+
    Fixes: 15e64ef6 ("parisc: Add lightweight spinlock checks")
    a0f4b787
spinlock.h 3.4 KB