mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 18:21:39 +01:00
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:
1 parent
a48e1323f9
commit
ee97008433
1 file changed
+1
-1
@@ -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);
|
||||
|
||||
|
||||