projects
/
xen.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
4cee6a3
)
xen, credit2: Put the per-cpu schedule lock back to the default lock when releasing cpu
author
George Dunlap
<george.dunlap@eu.citrix.com>
Tue, 10 Apr 2012 09:41:55 +0000
(10:41 +0100)
committer
George Dunlap
<george.dunlap@eu.citrix.com>
Tue, 10 Apr 2012 09:41:55 +0000
(10:41 +0100)
This fixes a bug that happens when you remove cpus from a credit2
cpupool.
Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
xen/common/sched_credit2.c
patch
|
blob
|
history
diff --git
a/xen/common/sched_credit2.c
b/xen/common/sched_credit2.c
index 785303b2594be74183dff8faa000135a667aff6d..471f6d5b07acf82161124b8d35d523679f64abc4 100644
(file)
--- a/
xen/common/sched_credit2.c
+++ b/
xen/common/sched_credit2.c
@@
-1952,6
+1952,7
@@
csched_free_pdata(const struct scheduler *ops, void *pcpu, int cpu)
unsigned long flags;
struct csched_private *prv = CSCHED_PRIV(ops);
struct csched_runqueue_data *rqd;
+ struct schedule_data *sd = &per_cpu(schedule_data, cpu);
int rqi;
spin_lock_irqsave(&prv->lock, flags);
@@
-1979,6
+1980,11
@@
csched_free_pdata(const struct scheduler *ops, void *pcpu, int cpu)
deactivate_runqueue(prv, rqi);
}
+ /* Move spinlock to the original lock. */
+ ASSERT(sd->schedule_lock == &rqd->lock);
+ ASSERT(!spin_is_locked(&sd->_lock));
+ sd->schedule_lock = &sd->_lock;
+
spin_unlock(&rqd->lock);
cpumask_clear_cpu(cpu, &prv->initialized);