diff options
Diffstat (limited to 'xen/common/schedule.c')
-rw-r--r-- | xen/common/schedule.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/xen/common/schedule.c b/xen/common/schedule.c index 724e8fa1ab..0854f55bf5 100644 --- a/xen/common/schedule.c +++ b/xen/common/schedule.c @@ -261,6 +261,18 @@ int sched_move_domain(struct domain *d, struct cpupool *c) domain_pause(d); + for_each_vcpu ( d, v ) + { + SCHED_OP(VCPU2OP(v), remove_vcpu, v); + SCHED_OP(VCPU2OP(v), free_vdata, v->sched_priv); + v->sched_priv = NULL; + } + + SCHED_OP(DOM2OP(d), free_domdata, d->sched_priv); + + d->cpupool = c; + d->sched_priv = domdata; + new_p = cpumask_first(c->cpu_valid); for_each_vcpu ( d, v ) { @@ -268,9 +280,6 @@ int sched_move_domain(struct domain *d, struct cpupool *c) migrate_timer(&v->singleshot_timer, new_p); migrate_timer(&v->poll_timer, new_p); - SCHED_OP(VCPU2OP(v), remove_vcpu, v); - SCHED_OP(VCPU2OP(v), free_vdata, v->sched_priv); - cpumask_setall(v->cpu_affinity); v->processor = new_p; v->sched_priv = vcpu_priv[v->vcpu_id]; @@ -278,13 +287,9 @@ int sched_move_domain(struct domain *d, struct cpupool *c) new_p = cpumask_cycle(new_p, c->cpu_valid); - SCHED_OP(VCPU2OP(v), insert_vcpu, v); + SCHED_OP(c->sched, insert_vcpu, v); } - d->cpupool = c; - SCHED_OP(DOM2OP(d), free_domdata, d->sched_priv); - d->sched_priv = domdata; - domain_update_node_affinity(d); domain_unpause(d); |