[libvirt] [PATCH v2 06/27] conf: Replace writes to def->vcpus with accessor

Peter Krempa pkrempa at redhat.com
Fri Nov 27 16:16:31 UTC 2015


---
 src/conf/domain_conf.c     | 20 +++++++++++++++++---
 src/conf/domain_conf.h     |  1 +
 src/hyperv/hyperv_driver.c |  5 ++++-
 src/libvirt_private.syms   |  1 +
 src/libxl/libxl_driver.c   | 14 +++++++++-----
 src/lxc/lxc_native.c       |  3 ++-
 src/openvz/openvz_conf.c   |  3 ++-
 src/openvz/openvz_driver.c |  4 +++-
 src/phyp/phyp_driver.c     |  3 ++-
 src/qemu/qemu_command.c    | 12 ++++++++----
 src/qemu/qemu_driver.c     |  8 +++++---
 src/test/test_driver.c     |  8 +++++---
 src/vbox/vbox_common.c     |  6 ++++--
 src/vmx/vmx.c              |  3 ++-
 src/vz/vz_sdk.c            |  3 ++-
 src/xen/xm_internal.c      |  3 ++-
 src/xenapi/xenapi_driver.c |  3 ++-
 src/xenconfig/xen_common.c |  5 ++++-
 src/xenconfig/xen_sxpr.c   | 11 ++++++++---
 19 files changed, 83 insertions(+), 33 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 7d7ace9..ab2048b 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -1435,7 +1435,7 @@ virDomainDefSetVcpusMax(virDomainDefPtr def,
                         unsigned int maxvcpus)
 {
     if (maxvcpus < def->vcpus)
-        def->vcpus = maxvcpus;
+        virDomainDefSetVcpus(def, maxvcpus);

     def->maxvcpus = maxvcpus;

@@ -1457,6 +1457,16 @@ virDomainDefGetVcpusMax(const virDomainDef *def)
 }


+int
+virDomainDefSetVcpus(virDomainDefPtr def,
+                     unsigned int vcpus)
+{
+    def->vcpus = vcpus;
+
+    return 0;
+}
+
+
 virDomainDiskDefPtr
 virDomainDiskDefNew(virDomainXMLOptionPtr xmlopt)
 {
@@ -14719,6 +14729,7 @@ virDomainVcpuParse(virDomainDefPtr def,
     int n;
     char *tmp = NULL;
     unsigned int maxvcpus;
+    unsigned int vcpus;
     int ret = -1;

     if ((n = virXPathUInt("string(./vcpu[1])", ctxt, &maxvcpus)) < 0) {
@@ -14734,16 +14745,19 @@ virDomainVcpuParse(virDomainDefPtr def,
     if (virDomainDefSetVcpusMax(def, maxvcpus) < 0)
         goto cleanup;

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

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

+    if (virDomainDefSetVcpus(def, vcpus) < 0)
+        goto cleanup;
+
     if (maxvcpus < def->vcpus) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("maxvcpus must not be less than current vcpus "
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 2b2952a..bab8a5e 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2340,6 +2340,7 @@ struct _virDomainDef {
 int virDomainDefSetVcpusMax(virDomainDefPtr def, unsigned int vcpus);
 bool virDomainDefHasVcpusOffline(const virDomainDef *def);
 unsigned int virDomainDefGetVcpusMax(const virDomainDef *def);
+int virDomainDefSetVcpus(virDomainDefPtr def, unsigned int vcpus);

 unsigned long long virDomainDefGetMemoryInitial(const virDomainDef *def);
 void virDomainDefSetMemoryTotal(virDomainDefPtr def, unsigned long long size);
diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c
index 1e8db03..52e9e45 100644
--- a/src/hyperv/hyperv_driver.c
+++ b/src/hyperv/hyperv_driver.c
@@ -877,7 +877,10 @@ hypervDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
                                 processorSettingData->data->VirtualQuantity) < 0)
         goto cleanup;

-    def->vcpus = processorSettingData->data->VirtualQuantity;
+    if (virDomainDefSetVcpus(def,
+                             processorSettingData->data->VirtualQuantity) < 0)
+        goto cleanup;
+
     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 bba42c9..d9a0d4b 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -232,6 +232,7 @@ virDomainDefParseString;
 virDomainDefPostParse;
 virDomainDefSetMemoryInitial;
 virDomainDefSetMemoryTotal;
+virDomainDefSetVcpus;
 virDomainDefSetVcpusMax;
 virDomainDeleteConfig;
 virDomainDeviceAddressIsValid;
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 217957c..905b392 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -555,7 +555,8 @@ libxlAddDom0(libxlDriverPrivatePtr driver)
     if (virDomainDefSetVcpusMax(vm->def, d_info.vcpu_max_id + 1))
         goto cleanup;

-    vm->def->vcpus = d_info.vcpu_online;
+    if (virDomainDefSetVcpus(vm->def, d_info.vcpu_online) < 0)
+        goto cleanup;
     vm->def->mem.cur_balloon = d_info.current_memkb;
     virDomainDefSetMemoryTotal(vm->def, d_info.max_memkb);

@@ -2191,7 +2192,8 @@ libxlDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
         break;

     case VIR_DOMAIN_VCPU_CONFIG:
-        def->vcpus = nvcpus;
+        if (virDomainDefSetVcpus(def, nvcpus) < 0)
+            goto cleanup;
         break;

     case VIR_DOMAIN_VCPU_LIVE:
@@ -2201,7 +2203,8 @@ libxlDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
                              " with libxenlight"), vm->def->id);
             goto endjob;
         }
-        vm->def->vcpus = nvcpus;
+        if (virDomainDefSetVcpus(vm->def, nvcpus) < 0)
+            goto endjob;
         break;

     case VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG:
@@ -2211,8 +2214,9 @@ libxlDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
                              " with libxenlight"), vm->def->id);
             goto endjob;
         }
-        vm->def->vcpus = nvcpus;
-        def->vcpus = nvcpus;
+        if (virDomainDefSetVcpus(vm->def, nvcpus) < 0 ||
+            virDomainDefSetVcpus(def, nvcpus) < 0)
+            goto endjob;
         break;
     }

diff --git a/src/lxc/lxc_native.c b/src/lxc/lxc_native.c
index 1c65475..5dd3db4 100644
--- a/src/lxc/lxc_native.c
+++ b/src/lxc/lxc_native.c
@@ -1022,7 +1022,8 @@ lxcParseConfigString(const char *config)
     if (virDomainDefSetVcpusMax(vmdef, 1) < 0)
         goto error;

-    vmdef->vcpus = 1;
+    if (virDomainDefSetVcpus(vmdef, 1) < 0)
+        goto error;

     vmdef->nfss = 0;
     vmdef->os.type = VIR_DOMAIN_OSTYPE_EXE;
diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c
index 6629105..e32dd6f 100644
--- a/src/openvz/openvz_conf.c
+++ b/src/openvz/openvz_conf.c
@@ -585,7 +585,8 @@ int openvzLoadDomains(struct openvz_driver *driver)
         if (virDomainDefSetVcpusMax(def, vcpus) < 0)
             goto cleanup;

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

         /* XXX load rest of VM config data .... */

diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
index 5e55033..2a9e6ac 100644
--- a/src/openvz/openvz_driver.c
+++ b/src/openvz/openvz_driver.c
@@ -1371,7 +1371,9 @@ static int openvzDomainSetVcpusInternal(virDomainObjPtr vm,
     if (virDomainDefSetVcpusMax(vm->def, nvcpus) < 0)
         return -1;

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

diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
index b60e5ba..3d086e3 100644
--- a/src/phyp/phyp_driver.c
+++ b/src/phyp/phyp_driver.c
@@ -3298,7 +3298,8 @@ phypDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)
     if (virDomainDefSetVcpusMax(&def, vcpus) < 0)
         goto err;

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

     return virDomainDefFormat(&def,
                               virDomainDefFormatConvertXMLFlags(flags));
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 0a0bc3b..ccea41b 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -12607,6 +12607,7 @@ qemuParseCommandLineSmp(virDomainDefPtr dom,
     unsigned int cores = 0;
     unsigned int threads = 0;
     unsigned int maxcpus = 0;
+    unsigned int vcpus = 0;
     size_t i;
     int nkws;
     char **kws;
@@ -12621,9 +12622,8 @@ qemuParseCommandLineSmp(virDomainDefPtr dom,
     for (i = 0; i < nkws; i++) {
         if (vals[i] == NULL) {
             if (i > 0 ||
-                virStrToLong_i(kws[i], &end, 10, &n) < 0 || *end != '\0')
+                virStrToLong_ui(kws[i], &end, 10, &vcpus) < 0 || *end != '\0')
                 goto syntax;
-            dom->vcpus = n;
         } else {
             if (virStrToLong_i(vals[i], &end, 10, &n) < 0 || *end != '\0')
                 goto syntax;
@@ -12641,11 +12641,14 @@ qemuParseCommandLineSmp(virDomainDefPtr dom,
     }

     if (maxcpus == 0)
-        maxcpus = dom->vcpus;
+        maxcpus = vcpus;

     if (virDomainDefSetVcpusMax(dom, maxcpus) < 0)
         goto error;

+    if (virDomainDefSetVcpus(dom, vcpus) < 0)
+        goto error;
+
     if (sockets && cores && threads) {
         virCPUDefPtr cpu;

@@ -12760,7 +12763,8 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
     virDomainDefSetMemoryTotal(def, def->mem.cur_balloon);
     if (virDomainDefSetVcpusMax(def, 1) < 0)
         goto error;
-    def->vcpus = 1;
+    if (virDomainDefSetVcpus(def, 1) < 0)
+        goto error;
     def->clock.offset = VIR_DOMAIN_CLOCK_OFFSET_UTC;

     def->onReboot = VIR_DOMAIN_LIFECYCLE_RESTART;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 6013443..f07d7a7 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -4835,8 +4835,9 @@ qemuDomainHotplugVcpus(virQEMUDriverPtr driver,
  cleanup:
     VIR_FREE(cpupids);
     VIR_FREE(mem_mask);
-    if (virDomainObjIsActive(vm))
-        vm->def->vcpus = vcpus;
+    if (virDomainObjIsActive(vm) &&
+        virDomainDefSetVcpus(vm->def, vcpus) < 0)
+        ret = -1;
     virDomainAuditVcpu(vm, oldvcpus, nvcpus, "update", rc == 1);
     if (cgroup_vcpu)
         virCgroupFree(&cgroup_vcpu);
@@ -4982,7 +4983,8 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
                 if (virDomainDefSetVcpusMax(persistentDef, nvcpus) < 0)
                     goto endjob;
             } else {
-                persistentDef->vcpus = nvcpus;
+                if (virDomainDefSetVcpus(persistentDef, nvcpus) < 0)
+                    goto endjob;
             }

             if (virDomainSaveConfig(cfg->configDir, persistentDef) < 0)
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 71b4513..c9e3eba 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -2374,15 +2374,17 @@ testDomainSetVcpusFlags(virDomainPtr domain, unsigned int nrCpus,
         goto cleanup;
     }

-    if (def)
-        def->vcpus = nrCpus;
+    if (def &&
+        virDomainDefSetVcpus(def, nrCpus) < 0)
+        goto cleanup;

     if (persistentDef) {
         if (flags & VIR_DOMAIN_VCPU_MAXIMUM) {
             if (virDomainDefSetVcpusMax(persistentDef, nrCpus) < 0)
                 goto cleanup;
         } else {
-            persistentDef->vcpus = nrCpus;
+            if (virDomainDefSetVcpus(persistentDef, nrCpus) < 0)
+                goto cleanup;
         }
     }

diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
index e2e8ebc..087d2e2 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -3904,7 +3904,8 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)
     if (virDomainDefSetVcpusMax(def, CPUCount) < 0)
         goto cleanup;

-    def->vcpus = CPUCount;
+    if (virDomainDefSetVcpus(def, CPUCount) < 0)
+        goto cleanup;

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

@@ -6061,7 +6062,8 @@ static char *vboxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot,
         if (virDomainDefSetVcpusMax(def->dom, CPUCount) < 0)
             goto cleanup;

-        def->dom->vcpus = CPUCount;
+        if (virDomainDefSetVcpus(def->dom, CPUCount) < 0)
+            goto cleanup;

         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 4b94df2..bcc4034 100644
--- a/src/vmx/vmx.c
+++ b/src/vmx/vmx.c
@@ -1460,7 +1460,8 @@ virVMXParseConfig(virVMXContext *ctx,
     if (virDomainDefSetVcpusMax(def, numvcpus) < 0)
         goto cleanup;

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

     /* 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 c90220c..890dd52 100644
--- a/src/vz/vz_sdk.c
+++ b/src/vz/vz_sdk.c
@@ -1153,7 +1153,8 @@ prlsdkConvertCpuInfo(PRL_HANDLE sdkdom,
     if (virDomainDefSetVcpusMax(def, cpuCount) < 0)
         goto cleanup;

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

     pret = PrlVmCfg_GetCpuMask(sdkdom, NULL, &buflen);
     prlsdkCheckRetGoto(pret, cleanup);
diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
index a81a7d6..4a7d0de 100644
--- a/src/xen/xm_internal.c
+++ b/src/xen/xm_internal.c
@@ -708,7 +708,8 @@ xenXMDomainSetVcpusFlags(virConnectPtr conn,
         if (virDomainDefSetVcpusMax(entry->def, vcpus) < 0)
             goto cleanup;
     } else {
-        entry->def->vcpus = vcpus;
+        if (virDomainDefSetVcpus(entry->def, vcpus) < 0)
+            goto cleanup;
     }

     /* If this fails, should we try to undo our changes to the
diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c
index fa66bb1..e4e9936 100644
--- a/src/xenapi/xenapi_driver.c
+++ b/src/xenapi/xenapi_driver.c
@@ -1505,7 +1505,8 @@ xenapiDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)
     if (virDomainDefSetVcpusMax(defPtr, vcpus) < 0)
         goto error;

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

     enum xen_on_normal_exit action;
     if (xen_vm_get_actions_after_shutdown(session, &action, vm))
diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c
index 26e2d0d..d11a919 100644
--- a/src/xenconfig/xen_common.c
+++ b/src/xenconfig/xen_common.c
@@ -508,7 +508,10 @@ xenParseCPUFeatures(virConfPtr conf, virDomainDefPtr def)
     if (xenConfigGetULong(conf, "vcpu_avail", &count, -1) < 0)
         return -1;

-    def->vcpus = MIN(count_one_bits_l(count), virDomainDefGetVcpusMax(def));
+    if (virDomainDefSetVcpus(def, MIN(count_one_bits_l(count),
+                                      virDomainDefGetVcpusMax(def))) < 0)
+        return -1;
+
     if (xenConfigGetString(conf, "cpus", &str, NULL) < 0)
         return -1;

diff --git a/src/xenconfig/xen_sxpr.c b/src/xenconfig/xen_sxpr.c
index 5386728..28b8e4e 100644
--- a/src/xenconfig/xen_sxpr.c
+++ b/src/xenconfig/xen_sxpr.c
@@ -1092,6 +1092,7 @@ xenParseSxpr(const struct sexpr *root,
     const char *tmp;
     virDomainDefPtr def;
     int hvm = 0, vmlocaltime;
+    unsigned int vcpus;

     if (!(def = virDomainDefNew()))
         goto error;
@@ -1175,9 +1176,13 @@ xenParseSxpr(const struct sexpr *root,

     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 || virDomainDefGetVcpusMax(def) < def->vcpus)
-        def->vcpus = virDomainDefGetVcpusMax(def);
+
+    vcpus = count_one_bits_l(sexpr_u64(root, "domain/vcpu_avail"));
+    if (!vcpus || virDomainDefGetVcpusMax(def) < vcpus)
+        vcpus = virDomainDefGetVcpusMax(def);
+
+    if (virDomainDefSetVcpus(def, vcpus) < 0)
+        goto error;

     tmp = sexpr_node(root, "domain/on_poweroff");
     if (tmp != NULL) {
-- 
2.6.2




More information about the libvir-list mailing list