]> xenbits.xensource.com Git - xen.git/commitdiff
numa: Small tweaks to domain_update_node_affinity() and its callers.
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 4 Aug 2010 16:10:46 +0000 (17:10 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 4 Aug 2010 16:10:46 +0000 (17:10 +0100)
From: Andrew Jones <drjones@redhat.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
xen/common/domain.c
xen/common/schedule.c

index 568c0a8acdada5a752281fb7cd776e7ef03a7223..9a9376763009de0af2d5d78355ed4919ecde3101 100644 (file)
@@ -358,12 +358,8 @@ void domain_update_node_affinity(struct domain *d)
         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);
index 9d2abba8b71a0c55e1c39bec306ef10f1b61af91..e118a72f7334cfecbfc34749cd53bdbab7e07033 100644 (file)
@@ -270,13 +270,13 @@ int sched_move_domain(struct domain *d, struct cpupool *c)
         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);
@@ -458,6 +458,7 @@ int cpu_disable_scheduler(unsigned int cpu)
     struct vcpu *v;
     struct cpupool *c;
     int    ret = 0;
+    bool_t affinity_broken;
 
     c = per_cpu(cpupool, cpu);
     if ( c == NULL )
@@ -468,6 +469,8 @@ int cpu_disable_scheduler(unsigned int cpu)
         if ( d->cpupool != c )
             continue;
 
+        affinity_broken = 0;
+
         for_each_vcpu ( d, v )
         {
             vcpu_schedule_lock_irq(v);
@@ -478,7 +481,7 @@ int cpu_disable_scheduler(unsigned int cpu)
                 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);
+                affinity_broken = 1;
             }
 
             if ( v->processor == cpu )
@@ -501,7 +504,11 @@ int cpu_disable_scheduler(unsigned int cpu)
             if ( v->processor == cpu )
                 ret = -EAGAIN;
         }
+
+        if ( affinity_broken )
+            domain_update_node_affinity(d);
     }
+
     return ret;
 }