On Fri, Aug 14, 2020 at 09:33:47PM +0200, Thomas Gleixner wrote: > 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? Because we like to argue? (Sorry, couldn't resist.) > 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. You are of course absolutely correct. > 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. Again, you are correct. Maybe the forecasted weekend heat will cause my brain to hallucinate a better solution, but in the meantime, the GFP_NOLOCK approach looks good from this end. Thanx, Paul