sched/core: fix bug when moving a domain between cpupools

For each UNIT, sched_set_affinity is called before unit->priv is updated
to the new cpupool private UNIT data structure. The issue is
sched_set_affinity will call the adjust_affinity method of the cpupool.
If defined, the new cpupool may use unit->priv (e.g. credit), which at
this point still references the old cpupool private UNIT data structure.

This change fixes the bug by moving the switch of unit->priv earler in
the function.

Signed-off-by: Jeff Kubascik <jeff.kubascik@dornerworks.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Acked-by: Dario Faggioli <dfaggioli@suse.com>
This commit is contained in:
Jeff Kubascik authored and Jan Beulich committed 2020-04-17 09:27:21 +02:00
1 parent a48e1323f9
commit ee97008433
1 file changed
+1 -1
+1 -1
View File
@@ -686,6 +686,7 @@ int sched_move_domain(struct domain *d, struct cpupool *c)
unsigned int unit_p = new_p;
unitdata = unit->priv;
unit->priv = unit_priv[unit_idx];
for_each_sched_unit_vcpu ( unit, v )
{
@@ -707,7 +708,6 @@ int sched_move_domain(struct domain *d, struct cpupool *c)
*/
spin_unlock_irq(lock);
unit->priv = unit_priv[unit_idx];
if ( !d->is_dying )
sched_move_irqs(unit);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.