mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
_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 <jbeulich@novell.com>
This commit is contained in:
1 parent
58a83b75d1
commit
32084d0016
1 file changed
+6
-3
@@ -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;
|
||||
}
|
||||
|
||||
|
||||