lockdep/selftests: Unbalanced migrate_disable() & rcu_read_lock().
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Mon, 29 Nov 2021 17:46:50 +0000 (18:46 +0100)
committerPeter Zijlstra <peterz@infradead.org>
Sat, 4 Dec 2021 09:56:24 +0000 (10:56 +0100)
commit512bf713cb4c8a42ae76e5ba1a78e70a768af301
tree7c958b9cca6b57c04712a283e2de896511dc7d10
parentfc78dd08e64011865799764d5b641bf823f84c66
lockdep/selftests: Unbalanced migrate_disable() & rcu_read_lock().

The tests with unbalanced lock() + unlock() operation leave a modified
preemption counter behind which is then reset to its original value
after the test.

The spin_lock() function on PREEMPT_RT does not include a
preempt_disable() statement but migrate_disable() and read_rcu_lock().
As a consequence both counter never get back to their original value
and the system explodes later after the selftest.  In the
double-unlock case on PREEMPT_RT, the migrate_disable() and RCU code
will trigger a warning which should be avoided. These counter should
not be decremented below their initial value.

Save both counters and bring them back to their original value after
the test.  In the double-unlock case, increment both counter in
advance to they become balanced after the double unlock.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20211129174654.668506-8-bigeasy@linutronix.de
lib/locking-selftest.c