From: George Dunlap Date: Tue, 10 Apr 2012 09:41:55 +0000 (+0100) Subject: xen, credit2: Put the per-cpu schedule lock back to the default lock when releasing cpu X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=7d302763ac7b0ecefb437ea45ee5b8d27a20d016;p=xen.git xen, credit2: Put the per-cpu schedule lock back to the default lock when releasing cpu This fixes a bug that happens when you remove cpus from a credit2 cpupool. Signed-off-by: George Dunlap Committed-by: Keir Fraser --- diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c index 785303b259..471f6d5b07 100644 --- 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);