|
[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 |