• Nicholas Piggin's avatar
    powerpc/watchdog: tighten non-atomic read-modify-write access · 858c93c3
    Nicholas Piggin authored
    Most updates to wd_smp_cpus_pending are under lock except the watchdog
    interrupt bit clear.
    
    This can race with non-atomic RMW updates to the mask under lock, which
    can happen in two instances:
    
    Firstly, if another CPU detects this one is stuck, removes it from the
    mask, mask becomes empty and is re-filled with non-atomic stores. This
    is okay because it would re-fill the mask with this CPU's bit clear
    anyway (because this CPU is now stuck), so it doesn't matter that the
    bit clear update got "lost". Add a comment for this.
    
    Secondly, if another CPU detects a different CPU is stuck and removes it
    from the pending mask with a non-atomic store to bytes which also
    include the bit of this CPU. This case can result in the bit clear being
    lost and the end result being the bit is set. This should be so rare it
    hardly matters, but to make things simpler to reason about just avoid
    the non-atomic access for that case.
    Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
    Reviewed-by: default avatarLaurent Dufour <ldufour@linux.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20211110025056.2084347-3-npiggin@gmail.com
    858c93c3
watchdog.c 13.3 KB