commit 14430d25448aa85df7cef991b0f52de91e37440b Author: Dario Faggioli Date: Mon Mar 9 15:26:30 2015 +0100 Signed-off-by: Dario Faggioli diff --git a/xen/common/cpupool.c b/xen/common/cpupool.c index a758a8b..ad7bbb5 100644 --- a/xen/common/cpupool.c +++ b/xen/common/cpupool.c @@ -296,6 +296,8 @@ static int cpupool_assign_cpu_locked(struct cpupool *c, unsigned int cpu) static long cpupool_unassign_cpu_helper(void *info) { int cpu = cpupool_moving_cpu; + struct cpupool *c = info; + struct domain *d; long ret; cpupool_dprintk("cpupool_unassign_cpu(pool=%d,cpu=%d)\n", @@ -318,6 +320,11 @@ static long cpupool_unassign_cpu_helper(void *info) cpupool_cpu_moving = NULL; } + rcu_read_lock(&domlist_read_lock); + for_each_domain_in_cpupool(d, c) + domain_update_node_affinity(d); + rcu_read_unlock(&domlist_read_lock); + out: spin_unlock(&cpupool_lock); cpupool_dprintk("cpupool_unassign_cpu ret=%ld\n", ret); @@ -379,12 +386,6 @@ static int cpupool_unassign_cpu(struct cpupool *c, unsigned int cpu) atomic_inc(&c->refcnt); cpupool_cpu_moving = c; cpumask_clear_cpu(cpu, c->cpu_valid); - - rcu_read_lock(&domlist_read_lock); - for_each_domain_in_cpupool(d, c) - domain_update_node_affinity(d); - rcu_read_unlock(&domlist_read_lock); - spin_unlock(&cpupool_lock); work_cpu = smp_processor_id();