xen/arm: gic-v3-lpi: Allocate the pending table while preparing the CPU
Commit
88a037e2cfe1 "page_alloc: assert IRQs are enabled in heap
alloc/free" extended the checks in the buddy allocator to catch any
use of the helpers from context with interrupts disabled.
Unfortunately, the rule is not followed in the LPI code when allocating
the pending table:
(XEN) Xen call trace:
(XEN) [<
000000000022a678>] alloc_xenheap_pages+0x178/0x194 (PC)
(XEN) [<
000000000022a670>] alloc_xenheap_pages+0x170/0x194 (LR)
(XEN) [<
0000000000237770>] _xmalloc+0x144/0x294
(XEN) [<
00000000002378d4>] _xzalloc+0x14/0x30
(XEN) [<
000000000027b4e4>] gicv3_lpi_init_rdist+0x54/0x324
(XEN) [<
0000000000279898>] arch/arm/gic-v3.c#gicv3_cpu_init+0x128/0x46
(XEN) [<
0000000000279bfc>] arch/arm/gic-v3.c#gicv3_secondary_cpu_init+0x20/0x50
(XEN) [<
0000000000277054>] gic_init_secondary_cpu+0x18/0x30
(XEN) [<
0000000000284518>] start_secondary+0x1a8/0x234
(XEN) [<
0000010722aa4200>]
0000010722aa4200
(XEN)
(XEN)
(XEN) ****************************************
(XEN) Panic on CPU 2:
(XEN) Assertion '!in_irq() && (local_irq_is_enabled() || num_online_cpus() <= 1)' failed at common/page_alloc.c:2212
(XEN) ****************************************
For now the patch extending the checks has been reverted, but it would
be good to re-introduce it (allocation with interrupt is not desirable).
The logic is reworked to allocate the pending table when preparing the
CPU.
Signed-off-by: Julien Grall <jgrall@amazon.com>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>