On Thu, Aug 13, 2020 at 07:12:11PM +0200, Michal Hocko wrote: > On Thu 13-08-20 09:29:04, Paul E. McKenney wrote: > > On Thu, Aug 13, 2020 at 06:13:57PM +0200, Michal Hocko wrote: > > > On Thu 13-08-20 09:04:42, Paul E. McKenney wrote: > > > > On Thu, Aug 13, 2020 at 05:54:12PM +0200, Michal Hocko wrote: > > > [...] > > > > > If the whole bailout is guarded by CONFIG_PREEMPT_RT specific atomicity > > > > > check then there is no functional problem - GFP_RT_SAFE would still be > > > > > GFP_NOWAIT so functional wise the allocator will still do the right > > > > > thing. > > > > > > > > Perhaps it was just me getting confused, early hour Pacific Time and > > > > whatever other excuses might apply. But I thought that you still had > > > > an objection to GFP_RT_SAFE based on changes in allocator semantics for > > > > other users. > > > > > > There is still that problem with lockdep complaining about raw->regular > > > spinlock on !PREEMPT_RT that would need to get resolved somehow. Thomas > > > is not really keen on adding some lockdep annotation mechanism and > > > unfortunatelly I do not have a different idea how to get rid of those. > > > > OK. So the current situation requires a choice between these these > > alternatives, each of which has shortcomings that have been mentioned > > earlier in this thread: > > > > 1. Prohibit invoking allocators from raw atomic context, such > > as when holding a raw spinlock. > > > > 2. Adding a GFP_ flag. > > Which would implemente a completely new level atomic allocation for all > preemption models > > > > > 3. Reusing existing GFP_ flags/values/whatever to communicate > > the raw-context information that was to be communicated by > > the new GFP_ flag. > > this would have to be RT specific to not change the semantic for > existing users. In other words make NOWAIT semantic working for > RT atomic contexts. > > > > > 4. Making lockdep forgive acquiring spinlocks while holding > > raw spinlocks, but only in CONFIG_PREEMPT_NONE=y kernels. > > and this would have to go along with 3 to remove false positives on !RT. OK, let's fill in the issues, then: 1. Prohibit invoking allocators from raw atomic context, such as when holding a raw spinlock. o This would prevent an important cache-locality optimization. 2. Adding a GFP_ flag. o Requires a new level atomic allocation for all preemption models, namely, confined to the allocator's lockless caches. 3. Reusing existing GFP_ flags/values/whatever to communicate the raw-context information that was to be communicated by the new GFP_ flag. o There are existing users of all combinations that might be unhappy with a change of semantics. o But Michal is OK with this if usage is restricted to RT. Except that this requires #4 below: 4. Making lockdep forgive acquiring spinlocks while holding raw spinlocks, but only in CONFIG_PREEMPT_NONE=y kernels. o This would allow latency degradation and other bad coding practices to creep in, per Thomas's recent email. Again, am I missing anything? Thanx, Paul