On 12 Jan 2023 22:59:54 -0800 Boqun Feng <boqun.feng@xxxxxxxxx> > --- a/kernel/rcu/srcutree.c > +++ b/kernel/rcu/srcutree.c > @@ -1267,6 +1267,8 @@ static void __synchronize_srcu(struct srcu_struct *ssp, bool do_norm) > { > struct rcu_synchronize rcu; > > + srcu_lock_sync(&ssp->dep_map); > + > RCU_LOCKDEP_WARN(lockdep_is_held(ssp) || > lock_is_held(&rcu_bh_lock_map) || > lock_is_held(&rcu_lock_map) || > -- > 2.38.1 The following deadlock is able to escape srcu_lock_sync() because the __lock_release folded in sync leaves one lock on the sync side. cpu9 cpu0 --- --- lock A srcu_lock_acquire(&ssp->dep_map); srcu_lock_sync(&ssp->dep_map); lock A