]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu_driver: fix setting vcpus for offline domain
authorPavel Hrdina <phrdina@redhat.com>
Tue, 13 Jan 2015 12:33:43 +0000 (13:33 +0100)
committerPavel Hrdina <phrdina@redhat.com>
Wed, 14 Jan 2015 09:34:20 +0000 (10:34 +0100)
Commit e3435caf fixed hot-plugging of vcpus with strict memory pinning
on NUMA hosts, but unfortunately it also broke updating number of vcpus
for offline guests using our API.

The issue is that we try to create a cpu cgroup for non-running guest
which fails as there are no cgroups for that domain. We should create
cgroups and update cpuset.mems only if we are hot-plugging.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
src/qemu/qemu_driver.c

index c02de0a2cde035843529fff1ec86f0163ee1aeb7..2be6ce9284b1632bb018c999bdafacfd86bedbb0 100644 (file)
@@ -4576,21 +4576,23 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
 
     priv = vm->privateData;
 
-    if (virCgroupNewEmulator(priv->cgroup, false, &cgroup_temp) < 0)
+    if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
         goto cleanup;
 
-    if (!(all_nodes = virNumaGetHostNodeset()))
-        goto cleanup;
+    if (flags & VIR_DOMAIN_AFFECT_LIVE && !(flags & VIR_DOMAIN_VCPU_GUEST)) {
+        if (virCgroupNewEmulator(priv->cgroup, false, &cgroup_temp) < 0)
+            goto cleanup;
 
-    if (!(all_nodes_str = virBitmapFormat(all_nodes)))
-        goto cleanup;
+        if (!(all_nodes = virNumaGetHostNodeset()))
+            goto cleanup;
 
-    if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
-        goto cleanup;
+        if (!(all_nodes_str = virBitmapFormat(all_nodes)))
+            goto cleanup;
 
-    if (virCgroupGetCpusetMems(cgroup_temp, &mem_mask) < 0 ||
-        virCgroupSetCpusetMems(cgroup_temp, all_nodes_str) < 0)
-        goto endjob;
+        if (virCgroupGetCpusetMems(cgroup_temp, &mem_mask) < 0 ||
+            virCgroupSetCpusetMems(cgroup_temp, all_nodes_str) < 0)
+            goto endjob;
+    }
 
     maximum = (flags & VIR_DOMAIN_VCPU_MAXIMUM) != 0;
     flags &= ~VIR_DOMAIN_VCPU_MAXIMUM;