|
[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 |