On 2023-09-27 23:06:09 [-0700], Boqun Feng wrote: > SRCU only has read lock usage from lockdep PoV, but after that commit, > we annotate synchronize_srcu() as a write lock usage, so that we can > detect deadlocks between *normal* srcu_read_lock() and > synchronize_srcu(), however the side effect is now SRCU has a write lock > usage from lockdep PoV. Ach. There is a write annotation for SRCU and RCU has none. Okay that explains it. > Actually in the above commit, I explicitly leave > srcu_read_lock_nmisafe() alone since its locking rules may be different > compared to srcu_read_lock(). In lockdep terms, srcu_read_lock_nmisafe() > is a !check read lock and srcu_read_lock() is a check read lock. This was on v6.6-rc3 so it has the commit f0f44752f5f61 ("rcu: Annotate SRCU's update-side lockdep dependencies"). > Maybe > instead of using the trylock trick, we change lockdep to igore !check > locks for NMI context detection? Untested code as below: Just tested, no splat for the SRCU-in-NMI usage. Sebastian