[BUG] lockdep-reported deadlock with expiry_lock in 4.19.59-rt24 with CONFIG_PREEMPT_RT=n.
In about one in seven to ten boots, lockdep reports a
deadlock of the form
[ 19.245929] WARNING: inconsistent lock state
[ 19.250200] 4.19.59-rt24 #1 Not tainted
[ 19.254040] --------------------------------
[ 19.258311] inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
[ 19.264319] rcu_preempt/13 [HC0[0]:SC0[0]:HE1:SE1] takes:
[ 19.269710] ... (&(&base->expiry_lock)->rlock){+.?.}, at: del_timer_sync+0xaa/0x100
...
[ 19.391803] lock(&(&base->expiry_lock)->rlock);
[ 19.396507] <Interrupt>
[ 19.399134] lock(&(&base->expiry_lock)->rlock);
[ 19.404014]
*** DEADLOCK ***
This splat happens with a 4.19.59-rt24 kernel, using the
attached .config. This .config turns off rt, has a bunch
of debug options enabled, and has enough drivers declared
static for me to be able to boot this kernel without
an initrd.
Today, most people would not be affected by this as those
that apply the rt patch typically also turn rt on. The
current effort to mainstream rt, however, means that the
use of nort with the rt patch applied will become common,
and at that time this problem will become significant.
(nitpick, maybe relevent detail: I am booting with RHEL8
userland.)
Regards,
Joe