[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] sched: fix locking of remove_vcpu() in credit1
commit 897cc6d07acd3e66356f021c5f7f9a49ef061d5d Author: Dario Faggioli <dario.faggioli@xxxxxxxxxx> AuthorDate: Fri Nov 6 15:16:38 2015 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Fri Nov 6 15:16:38 2015 +0100 sched: fix locking of remove_vcpu() in credit1 In fact, csched_vcpu_remove() (i.e., the credit1 implementation of remove_vcpu()) manipulates runqueues, so holding the runqueue lock is necessary. However, the vCPU just can't be on the runqueue, when the function is called. We can therefore ASSERT() that, and avoid doing any runqueue manipulations (rather than adding the runqueue locking around it). Also, while there, *_lock_irq() (for the private lock) is enough, there is no need to *_lock_irqsave(). Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx> Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxx> --- xen/common/sched_credit.c | 11 ++++------- 1 files changed, 4 insertions(+), 7 deletions(-) diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c index 9eb457c..72a2109 100644 --- a/xen/common/sched_credit.c +++ b/xen/common/sched_credit.c @@ -933,28 +933,25 @@ csched_vcpu_remove(const struct scheduler *ops, struct vcpu *vc) struct csched_private *prv = CSCHED_PRIV(ops); struct csched_vcpu * const svc = CSCHED_VCPU(vc); struct csched_dom * const sdom = svc->sdom; - unsigned long flags; SCHED_STAT_CRANK(vcpu_remove); + ASSERT(!__vcpu_on_runq(svc)); + if ( test_and_clear_bit(CSCHED_FLAG_VCPU_PARKED, &svc->flags) ) { SCHED_STAT_CRANK(vcpu_unpark); vcpu_unpause(svc->vcpu); } - if ( __vcpu_on_runq(svc) ) - __runq_remove(svc); - - spin_lock_irqsave(&(prv->lock), flags); + spin_lock_irq(&prv->lock); if ( !list_empty(&svc->active_vcpu_elem) ) __csched_vcpu_acct_stop_locked(prv, svc); - spin_unlock_irqrestore(&(prv->lock), flags); + spin_unlock_irq(&prv->lock); BUG_ON( sdom == NULL ); - BUG_ON( !list_empty(&svc->runq_elem) ); } static void -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |