]> xenbits.xensource.com Git - xen.git/commitdiff
xen/arinc653: call xfree() with local IRQ enabled
authorAnderson Choi <anderson.choi@boeing.com>
Thu, 20 Mar 2025 11:55:12 +0000 (12:55 +0100)
committerJan Beulich <jbeulich@suse.com>
Thu, 20 Mar 2025 11:55:12 +0000 (12:55 +0100)
xen panic is observed with the following configuration.

1. Debug xen build (CONFIG_DEBUG=y)
2. dom1 of an ARINC653 domain
3. shutdown dom1 with xl command

$ xl shutdown <domain_name>

(XEN) ****************************************
(XEN) Panic on CPU 2:
(XEN) Assertion '!in_irq() && (local_irq_is_enabled() || num_online_cpus() <= 1)' failed at common/xmalloc_tlsf.c:714
(XEN) ****************************************

panic was triggered since xfree() was called with local IRQ disabled and
therefore assertion failed.

Fix this by calling xfree() after local IRQ is enabled.

Fixes: 19049f8d796a sched: fix locking in a653sched_free_vdata()
Signed-off-by: Anderson Choi <anderson.choi@boeing.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Acked-by: Nathan Studer <nathan.studer@dornerworks.com>
master commit: 3ee55c9543fcf0b35593f030b53f56f3222046b7
master date: 2025-03-19 16:44:00 +0000

xen/common/sched/arinc653.c

index 9ebae6d7ae3932b2c6c65b8573e740451c0721f2..930361fa5c8e9c89a7d3c25e930f6d42cd43c4e6 100644 (file)
@@ -463,10 +463,11 @@ a653sched_free_udata(const struct scheduler *ops, void *priv)
     if ( !is_idle_unit(av->unit) )
         list_del(&av->list);
 
-    xfree(av);
     update_schedule_units(ops);
 
     spin_unlock_irqrestore(&sched_priv->lock, flags);
+
+    xfree(av);
 }
 
 /**