|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] arm/gic: Use static irqaction
commit eec94999bf38c205f9e1b62ad05e2c8ddd2c89e5
Author: Mykyta Poturai <Mykyta_Poturai@xxxxxxxx>
AuthorDate: Wed Nov 12 10:51:47 2025 +0000
Commit: Julien Grall <julien@xxxxxxx>
CommitDate: Sun Nov 16 12:22:30 2025 +0000
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@xxxxxxxx>
Reviewed-by: Mykola Kvach <mykola_kvach@xxxxxxxx>
Reviewed-by: Julien Grall <jgrall@xxxxxxxxxx>
v3->v4:
* make irqactions static
* collect RBs
v2->v3:
* no changes
v1->v2:
* use percpu actions
---
xen/arch/arm/gic.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
index 260ee64cca..ee75258fc3 100644
--- a/xen/arch/arm/gic.c
+++ b/xen/arch/arm/gic.c
@@ -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,
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |