[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH v3] xen: credit2: fix spinlock irq-safety violation

In commit ad4b3e1e9df34 ("xen: credit2: implement
utilization cap") xfree() was being called (for
deallocating the budget replenishment timer, during
domain destruction) inside an IRQ disabled critical

That must not happen, as it uses the mem-pool's lock,
which needs to be taken with IRQ enabled. And, in fact,
we crash (in debug builds):

(XEN) ****************************************
(XEN) Panic on CPU 0:
(XEN) Xen BUG at spinlock.c:47
(XEN) ****************************************

Let's, therefore, kill and deallocate the timer outside of
the critical sections, when IRQs are enabled.

Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx>
Cc: osstest service owner <osstest-admin@xxxxxxxxxxxxxx>
Cc: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
Cc: Wei Liu <wei.liu2@xxxxxxxxxx>
Cc: Roger Pau Monné <roger.pau@xxxxxxxxxx>
Cc: Jan Beulich <JBeulich@xxxxxxxx>
This was spotted by OSSTest's flight 113562:

Changes from v2:
- kill_timer() stays above the critical section, while xfree() goes below it,
  to avoid having a domain in the linked list of domains with a NULL timer.

Changes from v1:
- kill_timer() and xfree() moved above critical section, instead than below.
 xen/common/sched_credit2.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c
index 32234ac..015e45e 100644
--- a/xen/common/sched_credit2.c
+++ b/xen/common/sched_credit2.c
@@ -2921,15 +2921,15 @@ csched2_free_domdata(const struct scheduler *ops, void 
     struct csched2_dom *sdom = data;
     struct csched2_private *prv = csched2_priv(ops);
-    write_lock_irqsave(&prv->lock, flags);
-    xfree(sdom->repl_timer);
+    write_lock_irqsave(&prv->lock, flags);
     write_unlock_irqrestore(&prv->lock, flags);
+    xfree(sdom->repl_timer);

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.