diff options
author | Juergen Gross <juergen.gross@ts.fujitsu.com> | 2012-01-24 14:20:40 +0000 |
---|---|---|
committer | Juergen Gross <juergen.gross@ts.fujitsu.com> | 2012-01-24 14:20:40 +0000 |
commit | 79cf2c4c4f78e970e5e62b2d246b22cd4d1dc442 (patch) | |
tree | f454fdffc74fe8019b2166ff9133540577c497db /xen | |
parent | 9b80635f9dd46b584f04c8e948a71c48bd412f96 (diff) | |
download | xen-79cf2c4c4f78e970e5e62b2d246b22cd4d1dc442.tar.gz xen-79cf2c4c4f78e970e5e62b2d246b22cd4d1dc442.tar.bz2 xen-79cf2c4c4f78e970e5e62b2d246b22cd4d1dc442.zip |
switch to dynamically allocated cpumask in domain_update_node_affinity()
cpumasks should rather be allocated dynamically.
Signed-off-by: juergen.gross@ts.fujitsu.com
Committed-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen')
-rw-r--r-- | xen/common/domain.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/xen/common/domain.c b/xen/common/domain.c index 229c1d07f7..50cd32da18 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -220,6 +220,7 @@ struct domain *domain_create( INIT_PAGE_LIST_HEAD(&d->xenpage_list); spin_lock_init(&d->node_affinity_lock); + d->node_affinity = NODE_MASK_ALL; spin_lock_init(&d->shutdown_lock); d->shutdown_code = -1; @@ -333,23 +334,27 @@ struct domain *domain_create( void domain_update_node_affinity(struct domain *d) { - cpumask_t cpumask; + cpumask_var_t cpumask; nodemask_t nodemask = NODE_MASK_NONE; struct vcpu *v; unsigned int node; - cpumask_clear(&cpumask); + if ( !zalloc_cpumask_var(&cpumask) ) + return; + spin_lock(&d->node_affinity_lock); for_each_vcpu ( d, v ) - cpumask_or(&cpumask, &cpumask, v->cpu_affinity); + cpumask_or(cpumask, cpumask, v->cpu_affinity); for_each_online_node ( node ) - if ( cpumask_intersects(&node_to_cpumask(node), &cpumask) ) + if ( cpumask_intersects(&node_to_cpumask(node), cpumask) ) node_set(node, nodemask); d->node_affinity = nodemask; spin_unlock(&d->node_affinity_lock); + + free_cpumask_var(cpumask); } |