On Mon, 05 Jan 2026 16:08:56 +0100 Vlastimil Babka vbabka@suse.cz wrote:
+++ b/mm/page_alloc.c @@ -167,6 +167,31 @@ static inline void __pcp_trylock_noop(unsigned long *flags) { } pcp_trylock_finish(UP_flags); \ }) +/*
- With the UP spinlock implementation, when we spin_lock(&pcp->lock) (for i.e.
- a potentially remote cpu drain) and get interrupted by an operation that
- attempts pcp_spin_trylock(), we can't rely on the trylock failure due to UP
- spinlock assumptions making the trylock a no-op. So we have to turn that
- spin_lock() to a spin_lock_irqsave(). This works because on UP there are no
- remote cpu's so we can only be locking the only existing local one.
- */
+#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT) +static inline void __flags_noop(unsigned long *flags) { } +#define spin_lock_maybe_irqsave(lock, flags) \ +({ \
__flags_noop(&(flags)); \spin_lock(lock); \+}) +#define spin_unlock_maybe_irqrestore(lock, flags) \ +({ \
spin_unlock(lock); \__flags_noop(&(flags)); \+}) +#else +#define spin_lock_maybe_irqsave(lock, flags) spin_lock_irqsave(lock, flags) +#define spin_unlock_maybe_irqrestore(lock, flags) spin_unlock_irqrestore(lock, flags) +#endif
These are very generic looking names for something specific for page_alloc.c. Could you add a prefix of some kind to make it easy to see that these are specific to the mm code?
mm_spin_lock_maybe_irqsave() ?
Thanks,
-- Steve