mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
arm/gic: Use static irqaction
When stopping a core cpu_gic_callback is called in non-alloc context, which causes xfree in release_irq to fail an assert. To fix this, switch to a statically allocated irqaction that does not need to be freed in release_irq. Signed-off-by: Mykyta Poturai <mykyta_poturai@epam.com> Reviewed-by: Mykola Kvach <mykola_kvach@epam.com> Reviewed-by: Julien Grall <jgrall@amazon.com> v3->v4: * make irqactions static * collect RBs v2->v3: * no changes v1->v2: * use percpu actions
This commit is contained in:
1 parent
a7e82dab15
commit
eec94999bf
1 file changed
+9
-2
+9
-2
@@ -386,10 +386,17 @@ void gic_dump_info(struct vcpu *v)
|
||||
gic_hw_ops->dump_state(v);
|
||||
}
|
||||
|
||||
static DEFINE_PER_CPU_READ_MOSTLY(struct irqaction, irq_maintenance);
|
||||
|
||||
void init_maintenance_interrupt(void)
|
||||
{
|
||||
request_irq(gic_hw_ops->info->maintenance_irq, 0, maintenance_interrupt,
|
||||
"irq-maintenance", NULL);
|
||||
struct irqaction *maintenance = &this_cpu(irq_maintenance);
|
||||
|
||||
maintenance->name = "irq-maintenance";
|
||||
maintenance->handler = maintenance_interrupt;
|
||||
maintenance->dev_id = NULL;
|
||||
maintenance->free_on_release = 0;
|
||||
setup_irq(gic_hw_ops->info->maintenance_irq, 0, maintenance);
|
||||
}
|
||||
|
||||
int gic_make_hwdom_dt_node(const struct domain *d,
|
||||
|
||||