diff --git a/xen/common/domain.c b/xen/common/domain.c --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -358,12 +358,8 @@ cpus_or(cpumask, cpumask, v->cpu_affinity); for_each_online_node ( node ) - { if ( cpus_intersects(node_to_cpumask(node), cpumask) ) node_set(node, nodemask); - else - node_clear(node, nodemask); - } d->node_affinity = nodemask; spin_unlock(&d->node_affinity_lock); diff --git a/xen/common/schedule.c b/xen/common/schedule.c --- a/xen/common/schedule.c +++ b/xen/common/schedule.c @@ -270,13 +270,13 @@ SCHED_OP(VCPU2OP(v), destroy_vcpu, v); cpus_setall(v->cpu_affinity); - domain_update_node_affinity(d); v->processor = new_p; v->sched_priv = vcpu_priv[v->vcpu_id]; evtchn_move_pirqs(v); new_p = cycle_cpu(new_p, c->cpu_valid); } + domain_update_node_affinity(d); d->cpupool = c; SCHED_OP(DOM2OP(d), free_domdata, d->sched_priv); @@ -478,7 +478,6 @@ printk("Breaking vcpu affinity for domain %d vcpu %d\n", v->domain->domain_id, v->vcpu_id); cpus_setall(v->cpu_affinity); - domain_update_node_affinity(d); } if ( v->processor == cpu ) @@ -501,6 +500,7 @@ if ( v->processor == cpu ) ret = -EAGAIN; } + domain_update_node_affinity(d); } return ret; }