From: Jan Beulich Date: Mon, 14 Mar 2011 17:19:47 +0000 (+0000) Subject: _csched_cpu_pick(): don't write idle bias more than once X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=32084d00161c849be2c812b1d2ef8b2ce0cbd783;p=xen.git _csched_cpu_pick(): don't write idle bias more than once For the bias to be really meaningful, it should be updated only when the CPU selected will indeed be returned (and hence used for placing the vCPU in question). Signed-off-by: Jan Beulich --- diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c index bfdd567e3e..1d4d423620 100644 --- a/xen/common/sched_credit.c +++ b/xen/common/sched_credit.c @@ -464,6 +464,7 @@ _csched_cpu_pick(const struct scheduler *ops, struct vcpu *vc, bool_t commit) cpumask_t cpus; cpumask_t idlers; cpumask_t *online; + struct csched_pcpu *spc = NULL; int cpu; /* @@ -531,9 +532,8 @@ _csched_cpu_pick(const struct scheduler *ops, struct vcpu *vc, bool_t commit) && (weight_cpu * migrate_factor < weight_nxt) ) ) { cpus_and(nxt_idlers, cpus, nxt_idlers); - cpu = cycle_cpu(CSCHED_PCPU(nxt)->idle_bias, nxt_idlers); - if ( commit ) - CSCHED_PCPU(nxt)->idle_bias = cpu; + spc = CSCHED_PCPU(nxt); + cpu = cycle_cpu(spc->idle_bias, nxt_idlers); cpus_andnot(cpus, cpus, per_cpu(cpu_sibling_map, cpu)); } else @@ -542,6 +542,9 @@ _csched_cpu_pick(const struct scheduler *ops, struct vcpu *vc, bool_t commit) } } + if ( commit && spc ) + spc->idle_bias = cpu; + return cpu; }