]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: setvcpus: Properly coldplug vcpus when hotpluggable vcpus are present
authorPeter Krempa <pkrempa@redhat.com>
Mon, 9 Jan 2017 12:50:26 +0000 (13:50 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 10 Jan 2017 09:47:06 +0000 (10:47 +0100)
When coldplugging vcpus to a VM that already has a few hotpluggable
vcpus the code might generate invalid configuration as
non-hotpluggable cpus need to be clustered starting from vcpu 0.

This fix forces the added vcpus to be hotpluggable in such case.

Fixes a corner case described in:
https://bugzilla.redhat.com/show_bug.cgi?id=1370357

src/qemu/qemu_driver.c

index e3bc8cc77bb128171bc693f9cdbff88308b797c2..845ecdca866e0ec5bb3443521d61b2c9ffe07f7a 100644 (file)
@@ -4943,9 +4943,20 @@ qemuDomainSetVcpusConfig(virDomainDefPtr def,
         for (i = 0; i < maxvcpus; i++) {
             vcpu = virDomainDefGetVcpu(def, i);
 
-            if (!vcpu || vcpu->online)
+            if (!vcpu)
                 continue;
 
+            if (vcpu->online) {
+                /* non-hotpluggable vcpus need to be clustered at the beggining,
+                 * thus we need to force vcpus to be hotpluggable when we find
+                 * vcpus that are hotpluggable and online prior to the ones
+                 * we are going to add */
+                if (vcpu->hotpluggable == VIR_TRISTATE_BOOL_YES)
+                    hotpluggable = true;
+
+                continue;
+            }
+
             vcpu->online = true;
             if (hotpluggable) {
                 vcpu->hotpluggable = VIR_TRISTATE_BOOL_YES;