On Mon, 19 Jul 2021 09:54:52 +0200, Daniel Bristot de Oliveira wrote: > eventfd_signal assumes that spin_lock_irqsave/spin_unlock_irqrestore is > non-preemptable and therefore increments and decrements the percpu > variable inside the critical section. > > This obviously does not fly with PREEMPT_RT. If eventfd_signal is > preempted and an unrelated thread calls eventfd_signal, the result is > a spurious WARN. To avoid this, protect the percpu variable with a > local_lock. > > Reported-by: Daniel Bristot de Oliveira <bristot@xxxxxxxxxx> > Fixes: b5e683d5cab8 ("eventfd: track eventfd_signal() recursion depth") > Cc: He Zhe <zhe.he@xxxxxxxxxxxxx> > Cc: Jens Axboe <axboe@xxxxxxxxx> > Cc: Alexander Viro <viro@xxxxxxxxxxxxxxxxxx> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Cc: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > Cc: linux-fsdevel@xxxxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx > Co-developed-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > Signed-off-by: Daniel Bristot de Oliveira <bristot@xxxxxxxxxx> > --- Tested-by: Nicolas Saenz Julienne <nsaenzju@xxxxxxxxxx> Thanks! -- Nicolás Sáenz