domain_update_node_affinity: bail out early if no VCPUs are allocated
authorJulien Grall <julien.grall@linaro.org>
Mon, 11 Aug 2014 13:11:43 +0000 (15:11 +0200)
committerJan Beulich <jbeulich@suse.com>
Mon, 11 Aug 2014 13:11:43 +0000 (15:11 +0200)
The commit "move domain to cpupool0 before destroying it" make Xen crashes
when a domain is destroyed with d->vcpus allocated but no VCPU initialized.

Assertion '!cpumask_empty(dom_cpumask)' failed at domain.c:452
Xen call trace:
    [<00207bd8>] domain_update_node_affinity+0x10c/0x238 (PC)
    [<00000004>] 00000004 (LR)
    [<00226870>] sched_move_domain+0x3cc/0x42c
    [<0020925c>] domain_kill+0xc8/0x178
    [<00206a0c>] do_domctl+0xaac/0x15e4
    [<002529c0>] do_trap_hypervisor+0xc5c/0xf94
    [<002559f0>] return_from_trap+0/0x4

Bail out early if there is d->VCPU is not allocated or VCPU 0 has not been
initialized.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
xen/common/domain.c
xen/common/schedule.c

index d7a84cf3cbfa35a0fdc04efafd1714752c3fa56f..1952070bbf2359eaea7f7cbee15cfd77ad75d408 100644 (file)
@@ -415,6 +415,10 @@ void domain_update_node_affinity(struct domain *d)
     struct vcpu *v;
     unsigned int cpu;
 
+    /* Do we have vcpus already? If not, no need to update node-affinity. */
+    if ( !d->vcpu || !d->vcpu[0] )
+        return;
+
     if ( !zalloc_cpumask_var(&dom_cpumask) )
         return;
     if ( !zalloc_cpumask_var(&dom_cpumask_soft) )
index 9a497698122dc124d840336f24811619c9605e8f..55503e0297c5a163db9f2514793cc7b5bbdbdac8 100644 (file)
@@ -310,9 +310,7 @@ int sched_move_domain(struct domain *d, struct cpupool *c)
         SCHED_OP(old_ops, free_vdata, vcpudata);
     }
 
-    /* Do we have vcpus already? If not, no need to update node-affinity */
-    if ( d->vcpu )
-        domain_update_node_affinity(d);
+    domain_update_node_affinity(d);
 
     domain_unpause(d);