A question of sleeping with interrupts are disabled in start_kernel()
From: Jia-Ju Bai
Date: Fri Apr 06 2018 - 05:53:44 EST
Hello,
I have a question of the call path init/main.c:
init/main.c: start_kernel() ->
kernel/events/core.c: perf_pmu_register() ->
kernel/events/core.c: perf_event_init() ->
kernel/events/core.c: pmu_dev_alloc()
In this call path, start_kernel() calls local_irq_disable() to disable
the interrupt;
perf_pmu_register() calls mutex_lock() and idr_alloc(GFP_KERNEL), and
they can sleep;
pmu_dev_alloc() calls kzalloc(GFP_KERNEL), and it can sleep.
In my opinion, this code may sleep with interrupts are disabled.
I wonder why this code is okay?
Best wishes,
Jia-Ju Bai