On Fri, Aug 14 2020 at 11:02, Paul E. McKenney wrote: > On Fri, Aug 14, 2020 at 07:49:24PM +0200, Peter Zijlstra wrote: >> On Fri, Aug 14, 2020 at 09:11:06AM -0700, Paul E. McKenney wrote: >> > Just to make sure we are talking about the same thing, please see below >> > for an untested patch that illustrates how I was interpreting your words. >> > Was this what you had in mind? >> >> No, definitely not. >> >> Also, since we used to be able to use call_rcu() _everywhere_, including >> under zone->lock, how's that working with you calling the >> page-allocating from it? > > Indeed, that is exactly the problem we are trying to solve. Wait a moment. Why are we discussing RT induced raw non raw lock ordering at all? Whatever kernel you variant you look at this is not working: lock(zone) call_rcu() lock(zone) It's a simple recursive dead lock, nothing else. And that enforces the GFP_NOLOCK allocation mode or some other solution unless you make a new rule that calling call_rcu() is forbidden while holding zone lock or any other lock which might be nested inside the GFP_NOWAIT zone::lock held region. Thanks, tglx