@@ -2771,7 +2771,8 @@ static __always_inline void *slab_alloc_node(struct kmem_cache *s,
unsigned long tid;
if (IS_ENABLED(CONFIG_PREEMPT_RT) && IS_ENABLED(CONFIG_DEBUG_ATOMIC_SLEEP))
- WARN_ON_ONCE(!preemptible() && system_state >= SYSTEM_SCHEDULING);
+ WARN_ON_ONCE(!preemptible() && system_state >= SYSTEM_SCHEDULING &&
+ system_state != SYSTEM_SUSPEND);
s = slab_pre_alloc_hook(s, gfpflags);
if (!s)
@@ -3236,7 +3237,8 @@ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
int i;
if (IS_ENABLED(CONFIG_PREEMPT_RT) && IS_ENABLED(CONFIG_DEBUG_ATOMIC_SLEEP))
- WARN_ON_ONCE(!preemptible() && system_state >= SYSTEM_SCHEDULING);
+ WARN_ON_ONCE(!preemptible() && system_state >= SYSTEM_SCHEDULING &&
+ system_state != SYSTEM_SUSPEND);
/* memcg and kmem_cache debug support */
s = slab_pre_alloc_hook(s, flags);
Interrupts are off during resume from RAM, this will triger a warning when allocate memory in non-preemptible context on RT since commit b5d5bc970f209 ("mm: Warn on memory allocation in non-preemptible context on RT"), exclude suspend from this warning check. Fixes: b5d5bc970f209 ("mm: Warn on memory allocation in non-preemptible context on RT") Signed-off-by: Liwei Song <liwei.song@windriver.com> --- mm/slub.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)