]> xenbits.xensource.com Git - xen.git/commitdiff
credit: update timeslice under lock
authorJuergen Gross <jgross@suse.com>
Wed, 17 Feb 2016 15:48:16 +0000 (16:48 +0100)
committerJan Beulich <jbeulich@suse.com>
Wed, 17 Feb 2016 15:48:16 +0000 (16:48 +0100)
When updating the timeslice of the credit scheduler protect the
scheduler's private data by it's lock. Today a possible race could
result only in some weird scheduling decisions during one timeslice,
but further adjustments will need the lock anyway.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Dario Faggioli <dario.faggioli@citrix.com>
master commit: f2c96ac4dedf4976e46de34c69c2cd8b289c4ef2
master date: 2016-02-02 14:03:06 +0100

xen/common/sched_credit.c

index 2a3a67d06299663eccb79c7f4f92ac05c9da6d52..0e61a0e5f566855c446a829ab116dc51838d3100 100644 (file)
@@ -1080,6 +1080,7 @@ csched_sys_cntl(const struct scheduler *ops,
     int rc = -EINVAL;
     xen_sysctl_credit_schedule_t *params = &sc->u.sched_credit;
     struct csched_private *prv = CSCHED_PRIV(ops);
+    unsigned long flags;
 
     switch ( sc->cmd )
     {
@@ -1091,8 +1092,12 @@ csched_sys_cntl(const struct scheduler *ops,
                     || params->ratelimit_us < XEN_SYSCTL_SCHED_RATELIMIT_MIN))
             || MICROSECS(params->ratelimit_us) > MILLISECS(params->tslice_ms) )
                 goto out;
+
+        spin_lock_irqsave(&prv->lock, flags);
         __csched_set_tslice(prv, params->tslice_ms);
         prv->ratelimit_us = params->ratelimit_us;
+        spin_unlock_irqrestore(&prv->lock, flags);
+
         /* FALLTHRU */
     case XEN_SYSCTL_SCHEDOP_getinfo:
         params->tslice_ms = prv->tslice_ms;