[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4] xen: sched: fix deadlock when changing scheduling parameters
Commit f7b87b0745b4 ("enable per-VCPU parameter for RTDS") introduced a bug: it made it possible, in Credit and Credit2, when doing domain or vcpu parameters' manipulation, to leave the hypervisor with a spinlock held and interrupts disabled. Fix it. Signed-off-by: Chong Li <chong.li@xxxxxxxxx> Acked-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx> --- CC: <dario.faggioli@xxxxxxxxxx> CC: <george.dunlap@xxxxxxxxxxxxx> CC: <dgolomb@xxxxxxxxxxxxxx> CC: <mengxu@xxxxxxxxxxxxx> CC: <jbeulich@xxxxxxxx> CC: <lichong659@xxxxxxxxx> --- xen/common/sched_credit.c | 6 ++++-- xen/common/sched_credit2.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c index e5d15d8..4c4927f 100644 --- a/xen/common/sched_credit.c +++ b/xen/common/sched_credit.c @@ -1075,6 +1075,7 @@ csched_dom_cntl( struct csched_dom * const sdom = CSCHED_DOM(d); struct csched_private *prv = CSCHED_PRIV(ops); unsigned long flags; + int rc = 0; /* Protect both get and put branches with the pluggable scheduler * lock. Runq lock not needed anywhere in here. */ @@ -1101,12 +1102,13 @@ csched_dom_cntl( sdom->cap = op->u.credit.cap; break; default: - return -EINVAL; + rc = -EINVAL; + break; } spin_unlock_irqrestore(&prv->lock, flags); - return 0; + return rc; } static inline void diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c index d48ed5a..b8c8e40 100644 --- a/xen/common/sched_credit2.c +++ b/xen/common/sched_credit2.c @@ -1416,6 +1416,7 @@ csched2_dom_cntl( struct csched2_dom * const sdom = CSCHED2_DOM(d); struct csched2_private *prv = CSCHED2_PRIV(ops); unsigned long flags; + int rc = 0; /* Must hold csched2_priv lock to read and update sdom, * runq lock to update csvcs. */ @@ -1457,12 +1458,13 @@ csched2_dom_cntl( } break; default: - return -EINVAL; + rc = -EINVAL; + break; } spin_unlock_irqrestore(&prv->lock, flags); - return 0; + return rc; } static void * -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |