mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
riscv: panic if IRQ handler stacks cannot be allocated
init_irq_stacks() and init_irq_scs() may fail when arch_alloc_vmap_stack or scs_alloc return NULL, call panic() in this case. Signed-off-by: Osama Abdelkader <osama.abdelkader@gmail.com> Link: https://patch.msgid.link/20260404185522.21767-1-osama.abdelkader@gmail.com Signed-off-by: Paul Walmsley <pjw@kernel.org>
This commit is contained in:
parent
1b2c6b56a9
commit
2abd0dba56
|
|
@ -75,28 +75,34 @@ DECLARE_PER_CPU(ulong *, irq_shadow_call_stack_ptr);
|
|||
DEFINE_PER_CPU(ulong *, irq_shadow_call_stack_ptr);
|
||||
#endif
|
||||
|
||||
static void init_irq_scs(void)
|
||||
static void __init init_irq_scs(void)
|
||||
{
|
||||
int cpu;
|
||||
void *s;
|
||||
|
||||
if (!scs_is_enabled())
|
||||
return;
|
||||
|
||||
for_each_possible_cpu(cpu)
|
||||
per_cpu(irq_shadow_call_stack_ptr, cpu) =
|
||||
scs_alloc(cpu_to_node(cpu));
|
||||
for_each_possible_cpu(cpu) {
|
||||
s = scs_alloc(cpu_to_node(cpu));
|
||||
if (!s)
|
||||
panic("Failed to allocate IRQ shadow call stack resources\n");
|
||||
per_cpu(irq_shadow_call_stack_ptr, cpu) = s;
|
||||
}
|
||||
}
|
||||
|
||||
DEFINE_PER_CPU(ulong *, irq_stack_ptr);
|
||||
|
||||
#ifdef CONFIG_VMAP_STACK
|
||||
static void init_irq_stacks(void)
|
||||
static void __init init_irq_stacks(void)
|
||||
{
|
||||
int cpu;
|
||||
ulong *p;
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
p = arch_alloc_vmap_stack(IRQ_STACK_SIZE, cpu_to_node(cpu));
|
||||
if (!p)
|
||||
panic("Failed to allocate IRQ stack resources\n");
|
||||
per_cpu(irq_stack_ptr, cpu) = p;
|
||||
}
|
||||
}
|
||||
|
|
@ -104,7 +110,7 @@ static void init_irq_stacks(void)
|
|||
/* irq stack only needs to be 16 byte aligned - not IRQ_STACK_SIZE aligned. */
|
||||
DEFINE_PER_CPU_ALIGNED(ulong [IRQ_STACK_SIZE/sizeof(ulong)], irq_stack);
|
||||
|
||||
static void init_irq_stacks(void)
|
||||
static void __init init_irq_stacks(void)
|
||||
{
|
||||
int cpu;
|
||||
|
||||
|
|
@ -129,8 +135,8 @@ void do_softirq_own_stack(void)
|
|||
#endif /* CONFIG_SOFTIRQ_ON_OWN_STACK */
|
||||
|
||||
#else
|
||||
static void init_irq_scs(void) {}
|
||||
static void init_irq_stacks(void) {}
|
||||
static void __init init_irq_scs(void) {}
|
||||
static void __init init_irq_stacks(void) {}
|
||||
#endif /* CONFIG_IRQ_STACKS */
|
||||
|
||||
int arch_show_interrupts(struct seq_file *p, int prec)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user