On Sun, Jul 18, 2021 at 11:51:36PM +0100, Matthew Wilcox wrote:
On Sun, Jul 18, 2021 at 02:59:14PM -0700, Paul E. McKenney wrote:
https://lore.kernel.org/lkml/CAK2bqVK0Q9YcpakE7_Rc6nr-E4e2GnMOgi5jJj=_Eh_1k EHLHA@mail.gmail.com/
But this one does show this warning in v5.12.17:
WARN_ON_ONCE(!preempt && rcu_preempt_depth() > 0);
This is in rcu_note_context_switch(), and could be caused by something like a schedule() within an RCU read-side critical section. This would of course be RCU-usage bugs, given that you are not permitted to block within an RCU read-side critical section.
I suggest checking the functions in the stack trace to see where the rcu_read_lock() is hiding. CONFIG_PROVE_LOCKING might also be helpful.
I'm not sure I see it in this stack trace.
Is it possible that there's something taking the rcu read lock in an interrupt handler, then returning from the interrupt handler without releasing the rcu lock? Do we have debugging that would fire if somebody did this?
Lockdep should complain, but in the absence of lockdep I don't know that anything would gripe in this situation.
Also, this is a preemptible kernel, so it is possible to trace __rcu_read_lock(), if that helps.
Thanx, Paul