On Fri, Nov 15, 2024 at 05:48:53PM -0800, Alexei Starovoitov wrote: > +static inline struct page *try_alloc_page_noprof(int nid) > +{ > + /* If spin_locks are not held and interrupts are enabled, use normal path. */ > + if (preemptible()) > + return alloc_pages_node_noprof(nid, GFP_NOWAIT | __GFP_ZERO, 0); This isn't right for PREEMPT_RT, spinlock_t will be preemptible, but you very much do not want regular allocation calls while inside the allocator itself for example. > + /* > + * Best effort allocation from percpu free list. > + * If it's empty attempt to spin_trylock zone->lock. > + * Do not specify __GFP_KSWAPD_RECLAIM to avoid wakeup_kswapd > + * that may need to grab a lock. > + * Do not specify __GFP_ACCOUNT to avoid local_lock. > + * Do not warn either. > + */ > + return alloc_pages_node_noprof(nid, __GFP_TRYLOCK | __GFP_NOWARN | __GFP_ZERO, 0); > +}