Mailing List Archive

[xen-unstable] sched_credit: Hold lock while dump scheduler info
# HG changeset patch
# User Keir Fraser <keir@xen.org>
# Date 1299324981 0
# Node ID a1108fe570869a8c05c547497cb9e18c8445f6e8
# Parent d3d29df8f082d77c5fa8c790b4c97064943aef2d
sched_credit: Hold lock while dump scheduler info

Dump runq with debug key 'r' may cause dead loop like below:

(XEN) active vcpus:
(XEN) 1: [1.0] pri=0 flags=0 cpu=0 credit=263 [w=256]
(XEN) 2: [0.2] pri=0 flags=0 cpu=5 credit=284 [w=256]
(XEN) 3: [0.2] pri=0 flags=0 cpu=5 credit=282 [w=256]
...
(XEN) xxxxx: [0.2] pri=0 flags=0 cpu=2 credit=54 [w=256]
...
(XEN) xxxxx: [0.2] pri=0 flags=0 cpu=3 credit=-48 [w=256]
...

This means the active vcpu 0.2 became non-active with the active list
element empty just after it was accessed in the loop '2:'.

We should always hold a lock before access scheduler related list,
even in the debug purpose dump code.

Signed-off-by: Wei Gang <gang.wei@intel.com>
---


diff -r d3d29df8f082 -r a1108fe57086 xen/common/sched_credit.c
--- a/xen/common/sched_credit.c Sat Mar 05 11:34:41 2011 +0000
+++ b/xen/common/sched_credit.c Sat Mar 05 11:36:21 2011 +0000
@@ -1452,6 +1452,10 @@
struct list_head *iter_sdom, *iter_svc;
struct csched_private *prv = CSCHED_PRIV(ops);
int loop;
+ unsigned long flags;
+
+ spin_lock_irqsave(&(prv->lock), flags);
+
#define idlers_buf keyhandler_scratch

printk("info:\n"
@@ -1500,6 +1504,8 @@
}
}
#undef idlers_buf
+
+ spin_unlock_irqrestore(&(prv->lock), flags);
}

static int

_______________________________________________
Xen-changelog mailing list
Xen-changelog@lists.xensource.com
http://lists.xensource.com/xen-changelog