mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
credit2: during scheduling, update the idle mask before using it
Load balancing, when happening, at the end of a "scheduler epoch", can trigger vcpu migration, which in its turn may call runq_tickle(). If the cpu where this happens was idle, but we're now going to schedule a vcpu on it, let's update the runq's idle cpus mask accordingly _before_ doing load balancing. Not doing that, in fact, may cause runq_tickle() to think that the cpu is still idle, and tickle it to go pick up a vcpu from the runqueue, which might be wrong/unideal. Signed-off-by: Dario Faggioli <dfaggioli@suse.com> Reviewed-by: George Dunlap <george.dunlap@citrix.com>
This commit is contained in:
1 parent
568653e01b
commit
a9400d630b
1 file changed
+7
-7
@@ -3555,6 +3555,13 @@ csched2_schedule(
|
||||
__set_bit(__CSFLAG_scheduled, &snext->flags);
|
||||
}
|
||||
|
||||
/* Clear the idle mask if necessary */
|
||||
if ( cpumask_test_cpu(cpu, &rqd->idle) )
|
||||
{
|
||||
__cpumask_clear_cpu(cpu, &rqd->idle);
|
||||
smt_idle_mask_clear(cpu, &rqd->smt_idle);
|
||||
}
|
||||
|
||||
/*
|
||||
* The reset condition is "has a scheduler epoch come to an end?".
|
||||
* The way this is enforced is checking whether the vcpu at the top
|
||||
@@ -3575,13 +3582,6 @@ csched2_schedule(
|
||||
balance_load(ops, cpu, now);
|
||||
}
|
||||
|
||||
/* Clear the idle mask if necessary */
|
||||
if ( cpumask_test_cpu(cpu, &rqd->idle) )
|
||||
{
|
||||
__cpumask_clear_cpu(cpu, &rqd->idle);
|
||||
smt_idle_mask_clear(cpu, &rqd->smt_idle);
|
||||
}
|
||||
|
||||
snext->start_time = now;
|
||||
snext->tickled_cpu = -1;
|
||||
|
||||
|
||||