Re: BUG: sleeping function called from invalid context at include/linux/sched/mm.h:256

From: Zhouyi Zhou
Date: Sat Feb 12 2022 - 23:19:52 EST


Thank Matthew for correcting me

On Sun, Feb 13, 2022 at 12:09 PM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote:
>
> On Sun, Feb 13, 2022 at 11:19:09AM +0800, Zhouyi Zhou wrote:
> > I think the key to the problem lies in your attached console.log
> > (pasted below), at times 0.014987 and 0.015995, I see there are two
> > locks (cpu_hotplug_lock and jump_label_mutex) holded while
> > kmem_cache_alloc calls __might_resched (0.023356).
>
> Those are both sleeping locks (a percpu_rwsem and mutex, respectively).
> There is no problem with sleeping while holding a mutex or rwsem.
>From console.log, I see
[ 0.012154][ T1] BUG: sleeping function called from invalid
context at include/linux/sched/mm.h:256
[ 0.013128][ T1] in_atomic(): 0, irqs_disabled(): 1, non_block:
0, pid: 1, name: swapper/0
>From ___might_sleep, I see

9506 if ((preempt_count_equals(preempt_offset) && !irqs_disabled() &&
9507 !is_idle_task(current) && !current->non_block_count) ||
9508 system_state == SYSTEM_BOOTING || system_state >
SYSTEM_RUNNING ||
9509 oops_in_progress)
9510 return;

I guess it is irq_disable which cause the bug.

Thanks
Zhouyi