[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] xen, cpupools: Fix cpupool-move to make more consistent
# HG changeset patch # User George Dunlap <george.dunlap@xxxxxxxxxxxxx> # Date 1334050955 -3600 # Node ID 5bbda657a0160d3eec024bef2e7a59f199e84b10 # Parent b2a467527d68b0b021038a8f714b69974e37ca6c xen, cpupools: Fix cpupool-move to make more consistent The full order for creating new private data structures when moving from one pool to another is now: * Allocate all new structures - Allocate a new private domain structure (but don't point there yet) - Allocate per-vcpu data structures (but don't point there yet) * Remove old structures - Remove each vcpu, freeing the associated data structure - Free the domain data structure * Switch to the new structures - Set the domain to the new cpupool, with the new private domain structure - Set each vcpu to the respective new structure, and insert This is in line with a (fairly reasonable) assumption in credit2 that the private structure of the domain will be the private structure pointed to by the per-vcpu private structure. Also fix a bug, in which insert_vcpu was called with the *old* vcpu ops rather than the new ones. Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx> Committed-by: Keir Fraser <keir@xxxxxxx> --- diff -r b2a467527d68 -r 5bbda657a016 xen/common/schedule.c --- a/xen/common/schedule.c Tue Apr 10 10:41:55 2012 +0100 +++ b/xen/common/schedule.c Tue Apr 10 10:42:35 2012 +0100 @@ -261,6 +261,18 @@ int sched_move_domain(struct domain *d, 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, 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, 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); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |