]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: setvcpus: Extract setting of maximum vcpu count
authorPeter Krempa <pkrempa@redhat.com>
Wed, 3 Aug 2016 11:21:42 +0000 (13:21 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 16 Aug 2016 12:14:05 +0000 (14:14 +0200)
Setting of the maximum vcpu count is slightly semantically different
thus split it into a self-contained func.

src/qemu/qemu_driver.c

index 3708146c8e19615e32587c6a7fe95046897b6811..b81baa521e85a9d38a3d1b3dd64144754f8c77f3 100644 (file)
@@ -4755,6 +4755,42 @@ qemuDomainSetVcpusAgent(virDomainObjPtr vm,
 }
 
 
+static int
+qemuDomainSetVcpusMax(virQEMUDriverPtr driver,
+                      virDomainDefPtr def,
+                      virDomainDefPtr persistentDef,
+                      unsigned int nvcpus)
+{
+    virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
+    int ret = -1;
+
+    if (def) {
+        virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
+                       _("maximum vcpu count of a live domain can't be modified"));
+        goto cleanup;
+    }
+
+    if (virDomainNumaGetCPUCountTotal(persistentDef->numa) > nvcpus) {
+        virReportError(VIR_ERR_INVALID_ARG, "%s",
+                       _("Number of CPUs in <numa> exceeds the desired "
+                         "maximum vcpu count"));
+        goto cleanup;
+    }
+
+    if (virDomainDefSetVcpusMax(persistentDef, nvcpus, driver->xmlopt) < 0)
+        goto cleanup;
+
+    if (virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef) < 0)
+        goto cleanup;
+
+    ret = 0;
+
+ cleanup:
+    virObjectUnref(cfg);
+    return ret;
+}
+
+
 static int
 qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
                         unsigned int flags)
@@ -4799,14 +4835,12 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
     if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0)
         goto endjob;
 
-    if (def) {
-        if (flags & VIR_DOMAIN_VCPU_MAXIMUM) {
-            virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
-                           _("maximum vcpu count of a live domain can't be "
-                             "modified"));
-            goto endjob;
-        }
+    if (flags & VIR_DOMAIN_VCPU_MAXIMUM) {
+        ret = qemuDomainSetVcpusMax(driver, def, persistentDef, nvcpus);
+        goto endjob;
+    }
 
+    if (def) {
         if (nvcpus > virDomainDefGetVcpusMax(def)) {
             virReportError(VIR_ERR_INVALID_ARG,
                            _("requested vcpus is greater than max allowable"
@@ -4817,8 +4851,7 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
     }
 
     if (persistentDef) {
-        if (!(flags & VIR_DOMAIN_VCPU_MAXIMUM) &&
-            nvcpus > virDomainDefGetVcpusMax(persistentDef)) {
+        if (nvcpus > virDomainDefGetVcpusMax(persistentDef)) {
             virReportError(VIR_ERR_INVALID_ARG,
                            _("requested vcpus is greater than max allowable"
                              " vcpus for the persistent domain: %u > %u"),
@@ -4862,20 +4895,8 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
     }
 
     if (persistentDef) {
-        if (flags & VIR_DOMAIN_VCPU_MAXIMUM) {
-            if (virDomainNumaGetCPUCountTotal(persistentDef->numa) > nvcpus) {
-                virReportError(VIR_ERR_INVALID_ARG, "%s",
-                               _("Number of CPUs in <numa> exceeds the desired "
-                                 "maximum vcpu count"));
-                goto endjob;
-            }
-
-            if (virDomainDefSetVcpusMax(persistentDef, nvcpus, driver->xmlopt) < 0)
-                goto endjob;
-        } else {
-            if (virDomainDefSetVcpus(persistentDef, nvcpus) < 0)
-                goto endjob;
-        }
+        if (virDomainDefSetVcpus(persistentDef, nvcpus) < 0)
+            goto endjob;
 
         if (virDomainSaveConfig(cfg->configDir, driver->caps,
                                 persistentDef) < 0)