[libvirt] [PATCH 07/34] conf: Replace writes to def->maxvcpus with accessor

Peter Krempa pkrempa at redhat.com
Fri Nov 20 15:21:57 UTC 2015


To support further refactors replace all write access to def->maxvcpus
with a accessor function.
---
 src/conf/domain_conf.c     | 18 ++++++++++++++++--
 src/conf/domain_conf.h     |  2 ++
 src/hyperv/hyperv_driver.c |  5 ++++-
 src/libvirt_private.syms   |  1 +
 src/libxl/libxl_driver.c   |  8 ++++++--
 src/lxc/lxc_native.c       |  4 +++-
 src/openvz/openvz_conf.c   |  4 +++-
 src/openvz/openvz_driver.c |  5 ++++-
 src/phyp/phyp_driver.c     |  4 +++-
 src/qemu/qemu_command.c    |  9 +++++++--
 src/qemu/qemu_driver.c     |  4 +++-
 src/test/test_driver.c     |  4 +++-
 src/vbox/vbox_common.c     | 11 +++++++++--
 src/vmx/vmx.c              |  5 ++++-
 src/vz/vz_sdk.c            |  4 +++-
 src/xen/xm_internal.c      |  4 +++-
 src/xenapi/xenapi_driver.c |  4 +++-
 src/xenconfig/xen_common.c |  4 +++-
 src/xenconfig/xen_sxpr.c   |  3 ++-
 19 files changed, 82 insertions(+), 21 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index a744412..e0fc09c 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1424,6 +1424,16 @@ void virDomainLeaseDefFree(virDomainLeaseDefPtr def)
 }


+int
+virDomainDefSetVCpusMax(virDomainDefPtr def,
+                        unsigned int vcpus)
+{
+    def->maxvcpus = vcpus;
+
+    return 0;
+}
+
+
 virDomainDiskDefPtr
 virDomainDiskDefNew(virDomainXMLOptionPtr xmlopt)
 {
@@ -14645,18 +14655,22 @@ virDomainVcpuParse(virDomainDefPtr def,
 {
     int n;
     char *tmp = NULL;
+    unsigned int maxvcpus;
     int ret = -1;

-    if ((n = virXPathUInt("string(./vcpu[1])", ctxt, &def->maxvcpus)) < 0) {
+    if ((n = virXPathUInt("string(./vcpu[1])", ctxt, &maxvcpus)) < 0) {
         if (n == -2) {
             virReportError(VIR_ERR_XML_ERROR, "%s",
                            _("maximum vcpus count must be an integer"));
             goto cleanup;
         }

-        def->maxvcpus = 1;
+        maxvcpus = 1;
     }

+    if (virDomainDefSetVCpusMax(def, maxvcpus) < 0)
+        goto cleanup;
+
     if ((n = virXPathUInt("string(./vcpu[1]/@current)", ctxt, &def->vcpus)) < 0) {
         if (n == -2) {
             virReportError(VIR_ERR_XML_ERROR, "%s",
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 8d43ee6..498ca99 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2325,6 +2325,8 @@ struct _virDomainDef {
     xmlNodePtr metadata;
 };

+int virDomainDefSetVCpusMax(virDomainDefPtr def, unsigned int vcpus);
+
 unsigned long long virDomainDefGetMemoryInitial(const virDomainDef *def);
 void virDomainDefSetMemoryTotal(virDomainDefPtr def, unsigned long long size);
 void virDomainDefSetMemoryInitial(virDomainDefPtr def, unsigned long long size);
diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c
index 72261df..61e06b0 100644
--- a/src/hyperv/hyperv_driver.c
+++ b/src/hyperv/hyperv_driver.c
@@ -873,8 +873,11 @@ hypervDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
     virDomainDefSetMemoryTotal(def, memorySettingData->data->Limit * 1024); /* megabyte to kilobyte */
     def->mem.cur_balloon = memorySettingData->data->VirtualQuantity * 1024; /* megabyte to kilobyte */

+    if (virDomainDefSetVCpusMax(def,
+                                processorSettingData->data->VirtualQuantity) < 0)
+        goto cleanup;
+
     def->vcpus = processorSettingData->data->VirtualQuantity;
-    def->maxvcpus = processorSettingData->data->VirtualQuantity;
     def->os.type = VIR_DOMAIN_OSTYPE_HVM;

     /* FIXME: devices section is totally missing */
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 7e60d87..321f926 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -230,6 +230,7 @@ virDomainDefParseString;
 virDomainDefPostParse;
 virDomainDefSetMemoryInitial;
 virDomainDefSetMemoryTotal;
+virDomainDefSetVCpusMax;
 virDomainDeleteConfig;
 virDomainDeviceAddressIsValid;
 virDomainDeviceAddressTypeToString;
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index d77a0e4..5ef0784 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -552,8 +552,10 @@ libxlAddDom0(libxlDriverPrivatePtr driver)
     def = NULL;

     virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, VIR_DOMAIN_RUNNING_BOOTED);
+    if (virDomainDefSetVCpusMax(vm->def, d_info.vcpu_max_id + 1))
+        goto cleanup;
+
     vm->def->vcpus = d_info.vcpu_online;
-    vm->def->maxvcpus = d_info.vcpu_max_id + 1;
     vm->def->mem.cur_balloon = d_info.current_memkb;
     virDomainDefSetMemoryTotal(vm->def, d_info.max_memkb);

@@ -2184,7 +2186,9 @@ libxlDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,

     switch (flags) {
     case VIR_DOMAIN_VCPU_MAXIMUM | VIR_DOMAIN_VCPU_CONFIG:
-        def->maxvcpus = nvcpus;
+        if (virDomainDefSetVCpusMax(def, nvcpus) < 0)
+            goto cleanup;
+
         if (nvcpus < def->vcpus)
             def->vcpus = nvcpus;
         break;
diff --git a/src/lxc/lxc_native.c b/src/lxc/lxc_native.c
index 2f95597..d4a72c1 100644
--- a/src/lxc/lxc_native.c
+++ b/src/lxc/lxc_native.c
@@ -1019,7 +1019,9 @@ lxcParseConfigString(const char *config)

     /* Value not handled by the LXC driver, setting to
      * minimum required to make XML parsing pass */
-    vmdef->maxvcpus = 1;
+    if (virDomainDefSetVCpusMax(vmdef, 1) < 0)
+        goto error;
+
     vmdef->vcpus = 1;

     vmdef->nfss = 0;
diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c
index c0f65c9..aabb7c4 100644
--- a/src/openvz/openvz_conf.c
+++ b/src/openvz/openvz_conf.c
@@ -582,7 +582,9 @@ int openvzLoadDomains(struct openvz_driver *driver)
         if (ret == 0 || vcpus == 0)
             vcpus = openvzGetNodeCPUs();

-        def->maxvcpus = vcpus;
+        if (virDomainDefSetVCpusMax(def, vcpus) < 0)
+            goto cleanup;
+
         def->vcpus = vcpus;

         /* XXX load rest of VM config data .... */
diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
index b8c0f50..60b40d5 100644
--- a/src/openvz/openvz_driver.c
+++ b/src/openvz/openvz_driver.c
@@ -1368,7 +1368,10 @@ static int openvzDomainSetVcpusInternal(virDomainObjPtr vm,
     if (virRun(prog, NULL) < 0)
         return -1;

-    vm->def->maxvcpus = vm->def->vcpus = nvcpus;
+    if (virDomainDefSetVCpusMax(vm->def, nvcpus) < 0)
+        return -1;
+
+    vm->def->vcpus = nvcpus;
     return 0;
 }

diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
index 14264c0..7c77e23 100644
--- a/src/phyp/phyp_driver.c
+++ b/src/phyp/phyp_driver.c
@@ -3295,7 +3295,9 @@ phypDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)
         goto err;
     }

-    def.maxvcpus = vcpus;
+    if (virDomainDefSetVCpusMax(&def, vcpus) < 0)
+        goto err;
+
     def.vcpus = vcpus;

     return virDomainDefFormat(&def,
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index ef5ef93..af283af 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -12576,7 +12576,11 @@ qemuParseCommandLineSmp(virDomainDefPtr dom,
         }
     }

-    dom->maxvcpus = maxcpus ? maxcpus : dom->vcpus;
+    if (maxcpus == 0)
+        maxcpus = dom->vcpus;
+
+    if (virDomainDefSetVCpusMax(dom, maxcpus) < 0)
+        goto error;

     if (sockets && cores && threads) {
         virCPUDefPtr cpu;
@@ -12690,7 +12694,8 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
     def->id = -1;
     def->mem.cur_balloon = 64 * 1024;
     virDomainDefSetMemoryTotal(def, def->mem.cur_balloon);
-    def->maxvcpus = 1;
+    if (virDomainDefSetVCpusMax(def, 1) < 0)
+        goto error;
     def->vcpus = 1;
     def->clock.offset = VIR_DOMAIN_CLOCK_OFFSET_UTC;

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 65ccf99..8ab3209 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -4979,7 +4979,9 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
             }

             if (flags & VIR_DOMAIN_VCPU_MAXIMUM) {
-                persistentDef->maxvcpus = nvcpus;
+                if (virDomainDefSetVCpusMax(persistentDef, nvcpus) < 0)
+                    goto endjob;
+
                 if (nvcpus < persistentDef->vcpus)
                     persistentDef->vcpus = nvcpus;
             } else {
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 9ccd567..53d9338 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -2376,7 +2376,9 @@ testDomainSetVcpusFlags(virDomainPtr domain, unsigned int nrCpus,

     if (persistentDef) {
         if (flags & VIR_DOMAIN_VCPU_MAXIMUM) {
-            persistentDef->maxvcpus = nrCpus;
+            if (virDomainDefSetVCpusMax(persistentDef, nrCpus) < 0)
+                goto cleanup;
+
             if (nrCpus < persistentDef->vcpus)
                 persistentDef->vcpus = nrCpus;
         } else {
diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
index 3e6ed7a..20f44e9 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -3901,7 +3901,10 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)
     virDomainDefSetMemoryTotal(def, memorySize * 1024);

     gVBoxAPI.UIMachine.GetCPUCount(machine, &CPUCount);
-    def->maxvcpus = def->vcpus = CPUCount;
+    if (virDomainDefSetVCpusMax(def, CPUCount) < 0)
+        goto cleanup;
+
+    def->vcpus = CPUCount;

     /* Skip cpumasklen, cpumask, onReboot, onPoweroff, onCrash */

@@ -6055,7 +6058,11 @@ static char *vboxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot,
         def->dom->os.type = VIR_DOMAIN_OSTYPE_HVM;
         def->dom->os.arch = virArchFromHost();
         gVBoxAPI.UIMachine.GetCPUCount(machine, &CPUCount);
-        def->dom->maxvcpus = def->dom->vcpus = CPUCount;
+        if (virDomainDefSetVCpusMax(def->dom, CPUCount) < 0)
+            goto cleanup;
+
+        def->dom->vcpus = CPUCount;
+
         if (vboxSnapshotGetReadWriteDisks(def, snapshot) < 0)
             VIR_DEBUG("Could not get read write disks for snapshot");

diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
index 7c3c10a..41a872a 100644
--- a/src/vmx/vmx.c
+++ b/src/vmx/vmx.c
@@ -1457,7 +1457,10 @@ virVMXParseConfig(virVMXContext *ctx,
         goto cleanup;
     }

-    def->maxvcpus = def->vcpus = numvcpus;
+    if (virDomainDefSetVCpusMax(def, numvcpus) < 0)
+        goto cleanup;
+
+    def->vcpus = numvcpus;

     /* vmx:sched.cpu.affinity -> def:cpumask */
     /* NOTE: maps to VirtualMachine:config.cpuAffinity.affinitySet */
diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c
index 750133d..bef5146 100644
--- a/src/vz/vz_sdk.c
+++ b/src/vz/vz_sdk.c
@@ -1150,8 +1150,10 @@ prlsdkConvertCpuInfo(PRL_HANDLE sdkdom,
     if (cpuCount > hostcpus)
         cpuCount = hostcpus;

+    if (virDomainDefSetVCpusMax(def, cpuCount) < 0)
+        goto cleanup;
+
     def->vcpus = cpuCount;
-    def->maxvcpus = cpuCount;

     pret = PrlVmCfg_GetCpuMask(sdkdom, NULL, &buflen);
     prlsdkCheckRetGoto(pret, cleanup);
diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
index 75f98b1..7321b9f 100644
--- a/src/xen/xm_internal.c
+++ b/src/xen/xm_internal.c
@@ -704,7 +704,9 @@ xenXMDomainSetVcpusFlags(virConnectPtr conn,
     }

     if (flags & VIR_DOMAIN_VCPU_MAXIMUM) {
-        entry->def->maxvcpus = vcpus;
+        if (virDomainDefSetVCpusMax(entry->def, vcpus) < 0)
+            goto cleanup;
+
         if (entry->def->vcpus > vcpus)
             entry->def->vcpus = vcpus;
     } else {
diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c
index e503974..11cace1 100644
--- a/src/xenapi/xenapi_driver.c
+++ b/src/xenapi/xenapi_driver.c
@@ -1502,7 +1502,9 @@ xenapiDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)

     vcpus = xenapiDomainGetMaxVcpus(dom);

-    defPtr->maxvcpus = vcpus;
+    if (virDomainDefSetVCpusMax(defPtr, vcpus) < 0)
+        goto error;
+
     defPtr->vcpus = vcpus;

     enum xen_on_normal_exit action;
diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c
index 0890c73..05fc76c 100644
--- a/src/xenconfig/xen_common.c
+++ b/src/xenconfig/xen_common.c
@@ -502,7 +502,9 @@ xenParseCPUFeatures(virConfPtr conf, virDomainDefPtr def)
         MAX_VIRT_CPUS < count)
         return -1;

-    def->maxvcpus = count;
+    if (virDomainDefSetVCpusMax(def, count) < 0)
+        return -1;
+
     if (xenConfigGetULong(conf, "vcpu_avail", &count, -1) < 0)
         return -1;

diff --git a/src/xenconfig/xen_sxpr.c b/src/xenconfig/xen_sxpr.c
index 7fc9c9d..64a317d 100644
--- a/src/xenconfig/xen_sxpr.c
+++ b/src/xenconfig/xen_sxpr.c
@@ -1173,7 +1173,8 @@ xenParseSxpr(const struct sexpr *root,
         }
     }

-    def->maxvcpus = sexpr_int(root, "domain/vcpus");
+    if (virDomainDefSetVCpusMax(def, sexpr_int(root, "domain/vcpus")) < 0)
+        goto error;
     def->vcpus = count_one_bits_l(sexpr_u64(root, "domain/vcpu_avail"));
     if (!def->vcpus || def->maxvcpus < def->vcpus)
         def->vcpus = def->maxvcpus;
-- 
2.6.2




More information about the libvir-list mailing list