[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging] sched/core: fix bug when moving a domain between cpupools



commit ee97008433f15e60478058c8ace514b939b6f862
Author:     Jeff Kubascik <jeff.kubascik@xxxxxxxxxxxxxxx>
AuthorDate: Fri Apr 17 09:27:21 2020 +0200
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Fri Apr 17 09:27:21 2020 +0200

    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@xxxxxxxxxxxxxxx>
    Reviewed-by: Juergen Gross <jgross@xxxxxxxx>
    Acked-by: Dario Faggioli <dfaggioli@xxxxxxxx>
---
 xen/common/sched/core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/xen/common/sched/core.c b/xen/common/sched/core.c
index 626861a3fe..c4ed070470 100644
--- a/xen/common/sched/core.c
+++ b/xen/common/sched/core.c
@@ -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);
 
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.