[libvirt] [PATCHv3 08/27] fix fallout in src/qemu/

Peter Krempa pkrempa at redhat.com
Mon Mar 11 15:06:19 UTC 2013


---
 src/qemu/qemu_command.c   |   9 ++--
 src/qemu/qemu_command.h   |   3 ++
 src/qemu/qemu_conf.c      |  10 ++--
 src/qemu/qemu_conf.h      |   4 ++
 src/qemu/qemu_domain.c    |  58 +++++++++-------------
 src/qemu/qemu_domain.h    |   6 +--
 src/qemu/qemu_driver.c    | 123 +++++++++++++++++++++-------------------------
 src/qemu/qemu_migration.c |  22 ++++-----
 src/qemu/qemu_process.c   | 109 +++++++---------------------------------
 9 files changed, 130 insertions(+), 214 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 201fac1..1a740dc 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -8562,6 +8562,7 @@ qemuParseCommandLineBootDevs(virDomainDefPtr def, const char *str) {
  * as is practical. This is not an exact science....
  */
 virDomainDefPtr qemuParseCommandLine(virCapsPtr qemuCaps,
+                                     virDomainXMLConfPtr xmlconf,
                                      const char **progenv,
                                      const char **progargv,
                                      char **pidfile,
@@ -9423,7 +9424,7 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr qemuCaps,
         goto error;

     if (cmd->num_args || cmd->num_env) {
-        def->ns = qemuCaps->ns;
+        def->ns = *virDomainXMLConfGetNamespace(xmlconf);
         def->namespaceData = cmd;
     }
     else
@@ -9449,6 +9450,7 @@ error:


 virDomainDefPtr qemuParseCommandLineString(virCapsPtr qemuCaps,
+                                           virDomainXMLConfPtr xmlconf,
                                            const char *args,
                                            char **pidfile,
                                            virDomainChrSourceDefPtr *monConfig,
@@ -9462,7 +9464,7 @@ virDomainDefPtr qemuParseCommandLineString(virCapsPtr qemuCaps,
     if (qemuStringToArgvEnv(args, &progenv, &progargv) < 0)
         goto cleanup;

-    def = qemuParseCommandLine(qemuCaps, progenv, progargv,
+    def = qemuParseCommandLine(qemuCaps, xmlconf, progenv, progargv,
                                pidfile, monConfig, monJSON);

 cleanup:
@@ -9538,6 +9540,7 @@ cleanup:
 }

 virDomainDefPtr qemuParseCommandLinePid(virCapsPtr qemuCaps,
+                                        virDomainXMLConfPtr xmlconf,
                                         pid_t pid,
                                         char **pidfile,
                                         virDomainChrSourceDefPtr *monConfig,
@@ -9557,7 +9560,7 @@ virDomainDefPtr qemuParseCommandLinePid(virCapsPtr qemuCaps,
         qemuParseProcFileStrings(pid, "environ", &progenv) < 0)
         goto cleanup;

-    if (!(def = qemuParseCommandLine(qemuCaps, progenv, progargv,
+    if (!(def = qemuParseCommandLine(qemuCaps, xmlconf, progenv, progargv,
                                      pidfile, monConfig, monJSON)))
         goto cleanup;

diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h
index e4db000..a1214d8 100644
--- a/src/qemu/qemu_command.h
+++ b/src/qemu/qemu_command.h
@@ -167,17 +167,20 @@ int qemuOpenVhostNet(virDomainDefPtr def,
  * *must* decide how to fill in a name in this case
  */
 virDomainDefPtr qemuParseCommandLine(virCapsPtr qemuCaps,
+                                     virDomainXMLConfPtr xmlconf,
                                      const char **progenv,
                                      const char **progargv,
                                      char **pidfile,
                                      virDomainChrSourceDefPtr *monConfig,
                                      bool *monJSON);
 virDomainDefPtr qemuParseCommandLineString(virCapsPtr qemuCaps,
+                                           virDomainXMLConfPtr xmlconf,
                                            const char *args,
                                            char **pidfile,
                                            virDomainChrSourceDefPtr *monConfig,
                                            bool *monJSON);
 virDomainDefPtr qemuParseCommandLinePid(virCapsPtr qemuCaps,
+                                        virDomainXMLConfPtr xmlconf,
                                         pid_t pid,
                                         char **pidfile,
                                         virDomainChrSourceDefPtr *monConfig,
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 3ef3499..1beff6d 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -551,6 +551,13 @@ virQEMUDriverConfigPtr virQEMUDriverGetConfig(virQEMUDriverPtr driver)
     return conf;
 }

+virDomainXMLConfPtr
+virQEMUDriverCreateXMLConf(void)
+{
+    return virDomainXMLConfNew(&virQEMUDriverPrivateDataCallbacks,
+                               &virQEMUDriverDomainXMLNamespace);
+}
+

 virCapsPtr virQEMUDriverCreateCapabilities(virQEMUDriverPtr driver)
 {
@@ -573,9 +580,6 @@ virCapsPtr virQEMUDriverCreateCapabilities(virQEMUDriverPtr driver)
         caps->defaultDiskDriverType = VIR_STORAGE_FILE_RAW;
     }

-    qemuDomainSetPrivateDataHooks(caps);
-    qemuDomainSetNamespaceHooks(caps);
-
     if (virGetHostUUID(caps->host.host_uuid)) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        "%s", _("cannot get the host uuid"));
diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
index 6bb3dee..c5ddaad 100644
--- a/src/qemu/qemu_conf.h
+++ b/src/qemu/qemu_conf.h
@@ -188,6 +188,9 @@ struct _virQEMUDriver {
      */
     virCapsPtr caps;

+    /* Immutable pointer, Immutable object */
+    virDomainXMLConfPtr xmlconf;
+
     /* Immutable pointer, self-locking APIs */
     virQEMUCapsCachePtr qemuCapsCache;

@@ -298,5 +301,6 @@ void qemuSharedDiskEntryFree(void *payload, const void *name)
     ATTRIBUTE_NONNULL(1);

 int qemuDriverAllocateID(virQEMUDriverPtr driver);
+virDomainXMLConfPtr virQEMUDriverCreateXMLConf(void);

 #endif /* __QEMUD_CONF_H */
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 0e56596..2be207f 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -205,7 +205,8 @@ qemuDomainTrackJob(enum qemuDomainJob job)
 }


-static void *qemuDomainObjPrivateAlloc(void)
+static void
+*qemuDomainObjPrivateAlloc(void)
 {
     qemuDomainObjPrivatePtr priv;

@@ -227,7 +228,8 @@ error:
     return NULL;
 }

-static void qemuDomainObjPrivateFree(void *data)
+static void
+qemuDomainObjPrivateFree(void *data)
 {
     qemuDomainObjPrivatePtr priv = data;

@@ -256,7 +258,8 @@ static void qemuDomainObjPrivateFree(void *data)
 }


-static int qemuDomainObjPrivateXMLFormat(virBufferPtr buf, void *data)
+static int
+qemuDomainObjPrivateXMLFormat(virBufferPtr buf, void *data)
 {
     qemuDomainObjPrivatePtr priv = data;
     const char *monitorpath;
@@ -329,7 +332,8 @@ static int qemuDomainObjPrivateXMLFormat(virBufferPtr buf, void *data)
     return 0;
 }

-static int qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, void *data)
+static int
+qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, void *data)
 {
     qemuDomainObjPrivatePtr priv = data;
     char *monitorpath;
@@ -482,6 +486,14 @@ error:
 }


+virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks = {
+    .alloc = qemuDomainObjPrivateAlloc,
+    .free = qemuDomainObjPrivateFree,
+    .parse = qemuDomainObjPrivateXMLParse,
+    .format = qemuDomainObjPrivateXMLFormat,
+};
+
+
 static void
 qemuDomainDefNamespaceFree(void *nsdata)
 {
@@ -641,42 +653,25 @@ qemuDomainDefNamespaceHref(void)
 }


-void qemuDomainSetPrivateDataHooks(virCapsPtr caps)
-{
-    /* Domain XML parser hooks */
-    caps->privateDataAllocFunc = qemuDomainObjPrivateAlloc;
-    caps->privateDataFreeFunc = qemuDomainObjPrivateFree;
-    caps->privateDataXMLFormat = qemuDomainObjPrivateXMLFormat;
-    caps->privateDataXMLParse = qemuDomainObjPrivateXMLParse;
-
-}
+virDomainXMLNamespace virQEMUDriverDomainXMLNamespace = {
+    .parse = qemuDomainDefNamespaceParse,
+    .free = qemuDomainDefNamespaceFree,
+    .format = qemuDomainDefNamespaceFormatXML,
+    .href = qemuDomainDefNamespaceHref,
+};

-void qemuDomainSetNamespaceHooks(virCapsPtr caps)
-{
-    /* Domain Namespace XML parser hooks */
-    caps->ns.parse = qemuDomainDefNamespaceParse;
-    caps->ns.free = qemuDomainDefNamespaceFree;
-    caps->ns.format = qemuDomainDefNamespaceFormatXML;
-    caps->ns.href = qemuDomainDefNamespaceHref;
-}

 static void
 qemuDomainObjSaveJob(virQEMUDriverPtr driver, virDomainObjPtr obj)
 {
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;

     if (virDomainObjIsActive(obj)) {
-        if (virDomainSaveStatus(caps, cfg->stateDir, obj) < 0)
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, obj) < 0)
             VIR_WARN("Failed to save status on vm %s", obj->def->name);
     }

-cleanup:
     virObjectUnref(cfg);
-    virObjectUnref(caps);
 }

 void
@@ -1782,22 +1777,17 @@ qemuDomainSetFakeReboot(virQEMUDriverPtr driver,
 {
     qemuDomainObjPrivatePtr priv = vm->privateData;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;

     if (priv->fakeReboot == value)
         goto cleanup;

     priv->fakeReboot = value;

-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         VIR_WARN("Failed to save status on vm %s", vm->def->name);

 cleanup:
     virObjectUnref(cfg);
-    virObjectUnref(caps);
 }

 int
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 7dbbaff..3a12b45 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -180,9 +180,6 @@ void qemuDomainEventFlush(int timer, void *opaque);
 void qemuDomainEventQueue(virQEMUDriverPtr driver,
                           virDomainEventPtr event);

-void qemuDomainSetPrivateDataHooks(virCapsPtr caps);
-void qemuDomainSetNamespaceHooks(virCapsPtr caps);
-
 int qemuDomainObjBeginJob(virQEMUDriverPtr driver,
                           virDomainObjPtr obj,
                           enum qemuDomainJob job)
@@ -340,4 +337,7 @@ void qemuDomainCleanupRemove(virDomainObjPtr vm,
 void qemuDomainCleanupRun(virQEMUDriverPtr driver,
                           virDomainObjPtr vm);

+extern virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks;
+extern virDomainXMLNamespace virQEMUDriverDomainXMLNamespace;
+
 #endif /* __QEMU_DOMAIN_H__ */
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index f4bbd74..8e0abc3 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -441,6 +441,7 @@ qemuDomainSnapshotLoad(virDomainObjPtr vm,
         }

         def = virDomainSnapshotDefParseString(xmlStr, caps,
+                                              qemu_driver->xmlconf,
                                               QEMU_EXPECTED_VIRT_TYPES,
                                               flags);
         if (def == NULL) {
@@ -722,6 +723,9 @@ qemuStartup(bool privileged,
     if ((qemu_driver->caps = virQEMUDriverCreateCapabilities(qemu_driver)) == NULL)
         goto error;

+    if (!(qemu_driver->xmlconf = virQEMUDriverCreateXMLConf()))
+        goto error;
+
     /* If hugetlbfs is present, then we need to create a sub-directory within
      * it, since we can't assume the root mount point has permissions that
      * will let our spawned QEMU instances use it.
@@ -763,6 +767,7 @@ qemuStartup(bool privileged,
     /* Get all the running persistent or transient configs first */
     if (virDomainObjListLoadAllConfigs(qemu_driver->domains,
                                        qemu_driver->caps,
+                                       qemu_driver->xmlconf,
                                        cfg->stateDir,
                                        NULL,
                                        1, QEMU_EXPECTED_VIRT_TYPES,
@@ -787,6 +792,7 @@ qemuStartup(bool privileged,
     /* Then inactive persistent configs */
     if (virDomainObjListLoadAllConfigs(qemu_driver->domains,
                                        qemu_driver->caps,
+                                       qemu_driver->xmlconf,
                                        cfg->configDir,
                                        cfg->autostartDir,
                                        0, QEMU_EXPECTED_VIRT_TYPES,
@@ -860,6 +866,7 @@ qemuReload(void) {
     cfg = virQEMUDriverGetConfig(qemu_driver);
     virDomainObjListLoadAllConfigs(qemu_driver->domains,
                                    caps,
+                                   qemu_driver->xmlconf,
                                    cfg->configDir,
                                    cfg->autostartDir,
                                    0, QEMU_EXPECTED_VIRT_TYPES,
@@ -953,6 +960,8 @@ qemuShutdown(void) {
     virObjectUnref(qemu_driver->domains);
     virObjectUnref(qemu_driver->remotePorts);

+    virObjectUnref(qemu_driver->xmlconf);
+
     virSysinfoDefFree(qemu_driver->hostsysinfo);

     virObjectUnref(qemu_driver->closeCallbacks);
@@ -1465,7 +1474,7 @@ static virDomainPtr qemuDomainCreate(virConnectPtr conn, const char *xml,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (!(def = virDomainDefParseString(caps, xml,
+    if (!(def = virDomainDefParseString(caps, driver->xmlconf, xml,
                                         QEMU_EXPECTED_VIRT_TYPES,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
@@ -1483,7 +1492,7 @@ static virDomainPtr qemuDomainCreate(virConnectPtr conn, const char *xml,
         goto cleanup;

     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   caps,
+                                   driver->xmlconf,
                                    def,
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
                                    NULL)))
@@ -1551,7 +1560,6 @@ static int qemuDomainSuspend(virDomainPtr dom) {
     int eventDetail;
     int state;
     virQEMUDriverConfigPtr cfg = NULL;
-    virCapsPtr caps = NULL;

     vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);

@@ -1607,9 +1615,7 @@ static int qemuDomainSuspend(virDomainPtr dom) {
                                              eventDetail);
         }
     }
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto endjob;
-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         goto endjob;
     ret = 0;

@@ -1623,7 +1629,6 @@ cleanup:

     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return ret;
 }
@@ -1679,7 +1684,7 @@ static int qemuDomainResume(virDomainPtr dom) {
     }
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto endjob;
-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         goto endjob;
     ret = 0;

@@ -2077,7 +2082,7 @@ static int qemuDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem,

     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto endjob;
-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto endjob;

@@ -2838,7 +2843,7 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver, virDomainPtr dom,
     if (xmlin) {
         virDomainDefPtr def = NULL;

-        if (!(def = virDomainDefParseString(caps, xmlin,
+        if (!(def = virDomainDefParseString(caps, driver->xmlconf, xmlin,
                                             QEMU_EXPECTED_VIRT_TYPES,
                                             VIR_DOMAIN_XML_INACTIVE))) {
             goto endjob;
@@ -3752,7 +3757,7 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
     maximum = (flags & VIR_DOMAIN_VCPU_MAXIMUM) != 0;
     flags &= ~VIR_DOMAIN_VCPU_MAXIMUM;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto endjob;

@@ -3858,7 +3863,7 @@ qemuDomainPinVcpuFlags(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;

@@ -3949,7 +3954,7 @@ qemuDomainPinVcpuFlags(virDomainPtr dom,
         if (newVcpuPin)
             virDomainVcpuPinDefArrayFree(newVcpuPin, newVcpuPinNum);

-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
             goto cleanup;
     }

@@ -4038,7 +4043,7 @@ qemuDomainGetVcpuPinInfo(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &targetDef) < 0)
         goto cleanup;

@@ -4134,7 +4139,7 @@ qemuDomainPinEmulator(virDomainPtr dom,
         goto cleanup;
     }

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;

@@ -4215,7 +4220,7 @@ qemuDomainPinEmulator(virDomainPtr dom,
             goto cleanup;
         }

-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
             goto cleanup;
     }

@@ -4280,8 +4285,8 @@ qemuDomainGetEmulatorPinInfo(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
-                                        &targetDef) < 0)
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf,
+                                        vm, &flags, &targetDef) < 0)
         goto cleanup;

     if (flags & VIR_DOMAIN_AFFECT_LIVE)
@@ -4437,7 +4442,8 @@ qemuDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags, &def) < 0)
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf,
+                                        vm, &flags, &def) < 0)
         goto cleanup;

     if (flags & VIR_DOMAIN_AFFECT_LIVE) {
@@ -4749,14 +4755,14 @@ qemuDomainSaveImageOpen(virQEMUDriverPtr driver,
         header.was_running = state;

     /* Create a domain from this XML */
-    if (!(def = virDomainDefParseString(caps, xml,
+    if (!(def = virDomainDefParseString(caps, driver->xmlconf, xml,
                                         QEMU_EXPECTED_VIRT_TYPES,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto error;
     if (xmlin) {
         virDomainDefPtr def2 = NULL;

-        if (!(def2 = virDomainDefParseString(caps, xmlin,
+        if (!(def2 = virDomainDefParseString(caps, driver->xmlconf, xmlin,
                                              QEMU_EXPECTED_VIRT_TYPES,
                                              VIR_DOMAIN_XML_INACTIVE)))
             goto error;
@@ -4801,10 +4807,6 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
     virCommandPtr cmd = NULL;
     char *errbuf = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;

     if ((header->version == 2) &&
         (header->compressed != QEMU_SAVE_FORMAT_RAW)) {
@@ -4876,7 +4878,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
                                "%s", _("failed to resume domain"));
             goto cleanup;
         }
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Failed to save status on vm %s", vm->def->name);
             goto cleanup;
         }
@@ -4898,7 +4900,6 @@ cleanup:
     if (virSecurityManagerRestoreSavedStateLabel(driver->securityManager,
                                                  vm->def, path) < 0)
         VIR_WARN("failed to restore save state label on %s", path);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return ret;
 }
@@ -4917,7 +4918,6 @@ qemuDomainRestoreFlags(virConnectPtr conn,
     virQEMUSaveHeader header;
     virFileWrapperFdPtr wrapperFd = NULL;
     int state = -1;
-    virCapsPtr caps = NULL;

     virCheckFlags(VIR_DOMAIN_SAVE_BYPASS_CACHE |
                   VIR_DOMAIN_SAVE_RUNNING |
@@ -4929,9 +4929,6 @@ qemuDomainRestoreFlags(virConnectPtr conn,
     else if (flags & VIR_DOMAIN_SAVE_PAUSED)
         state = 0;

-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
-
     fd = qemuDomainSaveImageOpen(driver, path, &def, &header,
                                  (flags & VIR_DOMAIN_SAVE_BYPASS_CACHE) != 0,
                                  &wrapperFd, dxml, state, false, false);
@@ -4939,7 +4936,7 @@ qemuDomainRestoreFlags(virConnectPtr conn,
         goto cleanup;

     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   caps,
+                                   driver->xmlconf,
                                    def,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
@@ -4968,7 +4965,6 @@ cleanup:
     virFileWrapperFdFree(wrapperFd);
     if (vm)
         virObjectUnlock(vm);
-    virObjectUnref(caps);
     return ret;
 }

@@ -5221,7 +5217,7 @@ static char *qemuDomainXMLFromNative(virConnectPtr conn,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    def = qemuParseCommandLineString(caps, config,
+    def = qemuParseCommandLineString(caps, driver->xmlconf, config,
                                      NULL, NULL, NULL);
     if (!def)
         goto cleanup;
@@ -5269,7 +5265,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    def = virDomainDefParseString(caps, xmlData,
+    def = virDomainDefParseString(caps, driver->xmlconf, xmlData,
                                   QEMU_EXPECTED_VIRT_TYPES, 0);
     if (!def)
         goto cleanup;
@@ -5540,7 +5536,7 @@ static virDomainPtr qemuDomainDefine(virConnectPtr conn, const char *xml) {
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (!(def = virDomainDefParseString(caps, xml,
+    if (!(def = virDomainDefParseString(caps, driver->xmlconf, xml,
                                         QEMU_EXPECTED_VIRT_TYPES,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
@@ -5558,7 +5554,7 @@ static virDomainPtr qemuDomainDefine(virConnectPtr conn, const char *xml) {
         goto cleanup;

     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   caps,
+                                   driver->xmlconf,
                                    def,
                                    0,
                                    &oldDef)))
@@ -6479,7 +6475,7 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
             goto endjob;

         /* Make a copy for updated domain. */
-        vmdef = virDomainObjCopyPersistentDef(caps, vm);
+        vmdef = virDomainObjCopyPersistentDef(caps, driver->xmlconf, vm);
         if (!vmdef)
             goto endjob;
         switch (action) {
@@ -6530,7 +6526,7 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
          * changed even if we failed to attach the device. For example,
          * a new controller may be created.
          */
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             ret = -1;
             goto endjob;
         }
@@ -6907,7 +6903,7 @@ qemuDomainSetBlkioParameters(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;

@@ -7072,7 +7068,7 @@ qemuDomainGetBlkioParameters(virDomainPtr dom,
         goto cleanup;
     }

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;

@@ -7261,7 +7257,7 @@ qemuDomainSetMemoryParameters(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;

@@ -7391,7 +7387,7 @@ qemuDomainGetMemoryParameters(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;

@@ -7557,7 +7553,7 @@ qemuDomainSetNumaParameters(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;

@@ -7710,7 +7706,7 @@ qemuDomainGetNumaParameters(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;

@@ -7920,13 +7916,13 @@ qemuSetSchedulerParametersFlags(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &vmdef) < 0)
         goto cleanup;

     if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
         /* Make a copy for updated domain. */
-        vmdef = virDomainObjCopyPersistentDef(caps, vm);
+        vmdef = virDomainObjCopyPersistentDef(caps, driver->xmlconf, vm);
         if (!vmdef)
             goto cleanup;
     }
@@ -8021,7 +8017,7 @@ qemuSetSchedulerParametersFlags(virDomainPtr dom,
         }
     }

-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         goto cleanup;


@@ -8206,7 +8202,7 @@ qemuGetSchedulerParametersFlags(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;

@@ -8736,7 +8732,7 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;

@@ -8902,7 +8898,7 @@ qemuDomainGetInterfaceParameters(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;

@@ -11207,10 +11203,6 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver,
     bool reuse = (flags & VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT) != 0;
     virCgroupPtr cgroup = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;

     if (!virDomainObjIsActive(vm)) {
         virReportError(VIR_ERR_OPERATION_INVALID,
@@ -11305,11 +11297,10 @@ cleanup:
     virCgroupFree(&cgroup);

     if (ret == 0 || !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_TRANSACTION)) {
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0 ||
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0 ||
             (persist && virDomainSaveConfig(cfg->configDir, vm->newDef) < 0))
             ret = -1;
     }
-    virObjectUnref(caps);
     virObjectUnref(cfg);

     return ret;
@@ -11574,7 +11565,7 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain,
         !virDomainObjIsActive(vm))
         parse_flags |= VIR_DOMAIN_SNAPSHOT_PARSE_OFFLINE;

-    if (!(def = virDomainSnapshotDefParseString(xmlDesc, caps,
+    if (!(def = virDomainSnapshotDefParseString(xmlDesc, caps, driver->xmlconf,
                                                 QEMU_EXPECTED_VIRT_TYPES,
                                                 parse_flags)))
         goto cleanup;
@@ -11750,7 +11741,7 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain,
         /* Easiest way to clone inactive portion of vm->def is via
          * conversion in and back out of xml.  */
         if (!(xml = qemuDomainDefFormatLive(driver, vm->def, true, true)) ||
-            !(def->dom = virDomainDefParseString(caps, xml,
+            !(def->dom = virDomainDefParseString(caps, driver->xmlconf, xml,
                                                  QEMU_EXPECTED_VIRT_TYPES,
                                                  VIR_DOMAIN_XML_INACTIVE)))
             goto cleanup;
@@ -12321,7 +12312,7 @@ static int qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
      * than inactive xml?  */
     snap->def->current = true;
     if (snap->def->dom) {
-        config = virDomainDefCopy(caps, snap->def->dom, true);
+        config = virDomainDefCopy(caps, driver->xmlconf, snap->def->dom, true);
         if (!config)
             goto cleanup;
     }
@@ -12781,7 +12772,7 @@ static virDomainPtr qemuDomainAttach(virConnectPtr conn,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (!(def = qemuParseCommandLinePid(caps, pid,
+    if (!(def = qemuParseCommandLinePid(caps, driver->xmlconf, pid,
                                         &pidfile, &monConfig, &monJSON)))
         goto cleanup;

@@ -12815,7 +12806,7 @@ static virDomainPtr qemuDomainAttach(virConnectPtr conn,
         goto cleanup;

     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   caps,
+                                   driver->xmlconf,
                                    def,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
@@ -13895,7 +13886,7 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
     if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto endjob;

@@ -14055,7 +14046,7 @@ qemuDomainGetBlockIoTune(virDomainPtr dom,
     if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto endjob;

@@ -14244,7 +14235,7 @@ qemuDomainSetMetadata(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags,
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags,
                                         &persistentDef) < 0)
         goto cleanup;

@@ -14341,7 +14332,7 @@ qemuDomainGetMetadata(virDomainPtr dom,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (virDomainLiveConfigHelperMethod(caps, vm, &flags, &def) < 0)
+    if (virDomainLiveConfigHelperMethod(caps, driver->xmlconf, vm, &flags, &def) < 0)
         goto cleanup;

     /* use correct domain definition according to flags */
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 4c6d7e1..537b834 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -919,7 +919,8 @@ qemuMigrationCookieXMLParse(qemuMigrationCookiePtr mig,
                            n);
             goto error;
         }
-        mig->persistent = virDomainDefParseNode(caps, doc, nodes[0],
+        mig->persistent = virDomainDefParseNode(caps, driver->xmlconf,
+                                                doc, nodes[0],
                                                 -1, VIR_DOMAIN_XML_INACTIVE);
         if (!mig->persistent) {
             /* virDomainDefParseNode already reported
@@ -1923,7 +1924,7 @@ char *qemuMigrationBegin(virQEMUDriverPtr driver,
     }

     if (xmlin) {
-        if (!(def = virDomainDefParseString(caps, xmlin,
+        if (!(def = virDomainDefParseString(caps, driver->xmlconf, xmlin,
                                             QEMU_EXPECTED_VIRT_TYPES,
                                             VIR_DOMAIN_XML_INACTIVE)))
             goto cleanup;
@@ -2025,7 +2026,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
     if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
         goto cleanup;

-    if (!(def = virDomainDefParseString(caps, dom_xml,
+    if (!(def = virDomainDefParseString(caps, driver->xmlconf, dom_xml,
                                         QEMU_EXPECTED_VIRT_TYPES,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto cleanup;
@@ -2066,7 +2067,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
                 virDomainDefPtr newdef;

                 VIR_DEBUG("Using hook-filtered domain XML: %s", xmlout);
-                newdef = virDomainDefParseString(caps, xmlout,
+                newdef = virDomainDefParseString(caps, driver->xmlconf, xmlout,
                                                  QEMU_EXPECTED_VIRT_TYPES,
                                                  VIR_DOMAIN_XML_INACTIVE);
                 if (!newdef)
@@ -2084,7 +2085,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
     }

     if (!(vm = virDomainObjListAdd(driver->domains,
-                                   caps,
+                                   driver->xmlconf,
                                    def,
                                    VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
                                    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE,
@@ -3883,7 +3884,7 @@ qemuMigrationFinish(virQEMUDriverPtr driver,
             if (mig->persistent)
                 vm->newDef = vmdef = mig->persistent;
             else
-                vmdef = virDomainObjGetPersistentDef(caps, vm);
+                vmdef = virDomainObjGetPersistentDef(caps, driver->xmlconf, vm);
             if (!vmdef || virDomainSaveConfig(cfg->configDir, vmdef) < 0) {
                 /* Hmpf.  Migration was successful, but making it persistent
                  * was not.  If we report successful, then when this domain
@@ -3978,7 +3979,7 @@ qemuMigrationFinish(virQEMUDriverPtr driver,
         }

         if (virDomainObjIsActive(vm) &&
-            virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+            virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Failed to save status on vm %s", vm->def->name);
             goto endjob;
         }
@@ -4035,7 +4036,6 @@ int qemuMigrationConfirm(virQEMUDriverPtr driver,
     virDomainEventPtr event = NULL;
     int rv = -1;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;

     VIR_DEBUG("driver=%p, conn=%p, vm=%p, cookiein=%s, cookieinlen=%d, "
               "flags=%x, retcode=%d",
@@ -4044,9 +4044,6 @@ int qemuMigrationConfirm(virQEMUDriverPtr driver,

     virCheckFlags(QEMU_MIGRATION_FLAGS, -1);

-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
-
     qemuMigrationJobSetPhase(driver, vm,
                              retcode == 0
                              ? QEMU_MIGRATION_PHASE_CONFIRM3
@@ -4090,7 +4087,7 @@ int qemuMigrationConfirm(virQEMUDriverPtr driver,
         event = virDomainEventNewFromObj(vm,
                                          VIR_DOMAIN_EVENT_RESUMED,
                                          VIR_DOMAIN_EVENT_RESUMED_MIGRATED);
-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Failed to save status on vm %s", vm->def->name);
             goto cleanup;
         }
@@ -4103,7 +4100,6 @@ done:
 cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return rv;
 }
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index efb1298..244e4d7 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -641,13 +641,9 @@ qemuProcessHandleShutdown(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     qemuDomainObjPrivatePtr priv;
     virDomainEventPtr event = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;

     VIR_DEBUG("vm=%p", vm);

-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;
-
     virObjectLock(vm);

     priv = vm->privateData;
@@ -671,7 +667,7 @@ qemuProcessHandleShutdown(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
                                      VIR_DOMAIN_EVENT_SHUTDOWN,
                                      VIR_DOMAIN_EVENT_SHUTDOWN_FINISHED);

-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
         VIR_WARN("Unable to save status on vm %s after state change",
                  vm->def->name);
     }
@@ -683,10 +679,8 @@ qemuProcessHandleShutdown(qemuMonitorPtr mon ATTRIBUTE_UNUSED,

 unlock:
     virObjectUnlock(vm);
-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);

     return 0;
@@ -700,10 +694,6 @@ qemuProcessHandleStop(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virQEMUDriverPtr driver = qemu_driver;
     virDomainEventPtr event = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;

     virObjectLock(vm);
     if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
@@ -727,7 +717,7 @@ qemuProcessHandleStop(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
             VIR_WARN("Unable to release lease on %s", vm->def->name);
         VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));

-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Unable to save status on vm %s after state change",
                      vm->def->name);
         }
@@ -735,11 +725,8 @@ qemuProcessHandleStop(qemuMonitorPtr mon ATTRIBUTE_UNUSED,

 unlock:
     virObjectUnlock(vm);
-
-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);

     return 0;
@@ -753,10 +740,6 @@ qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virQEMUDriverPtr driver = qemu_driver;
     virDomainEventPtr event = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;

     virObjectLock(vm);
     if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_PAUSED) {
@@ -787,7 +770,7 @@ qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
         }
         VIR_FREE(priv->lockState);

-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Unable to save status on vm %s after state change",
                      vm->def->name);
         }
@@ -795,10 +778,8 @@ qemuProcessHandleResume(qemuMonitorPtr mon ATTRIBUTE_UNUSED,

 unlock:
     virObjectUnlock(vm);
-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -812,10 +793,6 @@ qemuProcessHandleRTCChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virQEMUDriverPtr driver = qemu_driver;
     virDomainEventPtr event = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;

     virObjectLock(vm);
     event = virDomainEventRTCChangeNewFromObj(vm, offset);
@@ -823,15 +800,13 @@ qemuProcessHandleRTCChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     if (vm->def->clock.offset == VIR_DOMAIN_CLOCK_OFFSET_VARIABLE)
         vm->def->clock.data.variable.adjustment = offset;

-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         VIR_WARN("unable to save domain status with RTC change");

     virObjectUnlock(vm);

-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -846,10 +821,6 @@ qemuProcessHandleWatchdog(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virDomainEventPtr watchdogEvent = NULL;
     virDomainEventPtr lifecycleEvent = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;

     virObjectLock(vm);
     watchdogEvent = virDomainEventWatchdogNewFromObj(vm, action);
@@ -869,7 +840,7 @@ qemuProcessHandleWatchdog(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
             VIR_WARN("Unable to release lease on %s", vm->def->name);
         VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));

-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Unable to save status on vm %s after watchdog event",
                      vm->def->name);
         }
@@ -896,14 +867,11 @@ qemuProcessHandleWatchdog(qemuMonitorPtr mon ATTRIBUTE_UNUSED,

     if (vm)
         virObjectUnlock(vm);
-
-cleanup:
     if (watchdogEvent)
         qemuDomainEventQueue(driver, watchdogEvent);
     if (lifecycleEvent)
         qemuDomainEventQueue(driver, lifecycleEvent);

-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -924,10 +892,6 @@ qemuProcessHandleIOError(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     const char *devAlias;
     virDomainDiskDefPtr disk;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;

     virObjectLock(vm);
     disk = qemuProcessFindDomainDiskByAlias(vm, diskAlias);
@@ -958,19 +922,17 @@ qemuProcessHandleIOError(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
             VIR_WARN("Unable to release lease on %s", vm->def->name);
         VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));

-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
             VIR_WARN("Unable to save status on vm %s after IO error", vm->def->name);
     }
     virObjectUnlock(vm);

-cleanup:
     if (ioErrorEvent)
         qemuDomainEventQueue(driver, ioErrorEvent);
     if (ioErrorEvent2)
         qemuDomainEventQueue(driver, ioErrorEvent2);
     if (lifecycleEvent)
         qemuDomainEventQueue(driver, lifecycleEvent);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -1121,10 +1083,6 @@ qemuProcessHandleTrayChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virDomainEventPtr event = NULL;
     virDomainDiskDefPtr disk;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;

     virObjectLock(vm);
     disk = qemuProcessFindDomainDiskByAlias(vm, devAlias);
@@ -1139,17 +1097,15 @@ qemuProcessHandleTrayChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
         else if (reason == VIR_DOMAIN_EVENT_TRAY_CHANGE_CLOSE)
             disk->tray_status = VIR_DOMAIN_DISK_TRAY_CLOSED;

-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Unable to save status on vm %s after tray moved event",
                      vm->def->name);
         }
     }

     virObjectUnlock(vm);
-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -1162,10 +1118,6 @@ qemuProcessHandlePMWakeup(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virDomainEventPtr event = NULL;
     virDomainEventPtr lifecycleEvent = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;

     virObjectLock(vm);
     event = virDomainEventPMWakeupNewFromObj(vm);
@@ -1183,20 +1135,17 @@ qemuProcessHandlePMWakeup(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
                                                   VIR_DOMAIN_EVENT_STARTED,
                                                   VIR_DOMAIN_EVENT_STARTED_WAKEUP);

-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Unable to save status on vm %s after wakeup event",
                      vm->def->name);
         }
     }

     virObjectUnlock(vm);
-
-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
     if (lifecycleEvent)
         qemuDomainEventQueue(driver, lifecycleEvent);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -1209,10 +1158,6 @@ qemuProcessHandlePMSuspend(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virDomainEventPtr event = NULL;
     virDomainEventPtr lifecycleEvent = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;

     virObjectLock(vm);
     event = virDomainEventPMSuspendNewFromObj(vm);
@@ -1229,7 +1174,7 @@ qemuProcessHandlePMSuspend(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
                                      VIR_DOMAIN_EVENT_PMSUSPENDED,
                                      VIR_DOMAIN_EVENT_PMSUSPENDED_MEMORY);

-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Unable to save status on vm %s after suspend event",
                      vm->def->name);
         }
@@ -1240,12 +1185,10 @@ qemuProcessHandlePMSuspend(qemuMonitorPtr mon ATTRIBUTE_UNUSED,

     virObjectUnlock(vm);

-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
     if (lifecycleEvent)
         qemuDomainEventQueue(driver, lifecycleEvent);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -1258,10 +1201,6 @@ qemuProcessHandleBalloonChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virQEMUDriverPtr driver = qemu_driver;
     virDomainEventPtr event = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;

     virObjectLock(vm);
     event = virDomainEventBalloonChangeNewFromObj(vm, actual);
@@ -1270,15 +1209,13 @@ qemuProcessHandleBalloonChange(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
               vm->def->mem.cur_balloon, actual);
     vm->def->mem.cur_balloon = actual;

-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         VIR_WARN("unable to save domain status with balloon change");

     virObjectUnlock(vm);

-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
     return 0;
 }
@@ -1291,10 +1228,6 @@ qemuProcessHandlePMSuspendDisk(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
     virDomainEventPtr event = NULL;
     virDomainEventPtr lifecycleEvent = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
-    virCapsPtr caps = NULL;
-
-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto cleanup;

     virObjectLock(vm);
     event = virDomainEventPMSuspendDiskNewFromObj(vm);
@@ -1311,7 +1244,7 @@ qemuProcessHandlePMSuspendDisk(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
                                      VIR_DOMAIN_EVENT_PMSUSPENDED,
                                      VIR_DOMAIN_EVENT_PMSUSPENDED_DISK);

-        if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+        if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
             VIR_WARN("Unable to save status on vm %s after suspend event",
                      vm->def->name);
         }
@@ -1322,12 +1255,10 @@ qemuProcessHandlePMSuspendDisk(qemuMonitorPtr mon ATTRIBUTE_UNUSED,

     virObjectUnlock(vm);

-cleanup:
     if (event)
         qemuDomainEventQueue(driver, event);
     if (lifecycleEvent)
         qemuDomainEventQueue(driver, lifecycleEvent);
-    virObjectUnref(caps);
     virObjectUnref(cfg);

     return 0;
@@ -3179,7 +3110,6 @@ qemuProcessReconnect(void *opaque)
     int state;
     int reason;
     virQEMUDriverConfigPtr cfg;
-    virCapsPtr caps = NULL;
     size_t i;

     memcpy(&oldjob, &data->oldjob, sizeof(oldjob));
@@ -3200,9 +3130,6 @@ qemuProcessReconnect(void *opaque)
      * deleted if qemuConnectMonitor() failed */
     virObjectRef(obj);

-    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
-        goto error;
-
     /* XXX check PID liveliness & EXE path */
     if (qemuConnectMonitor(driver, obj) < 0)
         goto error;
@@ -3282,7 +3209,7 @@ qemuProcessReconnect(void *opaque)
         goto error;

     /* update domain state XML with possibly updated state in virDomainObj */
-    if (virDomainSaveStatus(caps, cfg->stateDir, obj) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, obj) < 0)
         goto error;

     /* Run an hook to allow admins to do some magic */
@@ -3314,7 +3241,6 @@ endjob:

     virConnectClose(conn);
     virObjectUnref(cfg);
-    virObjectUnref(caps);

     return;

@@ -3352,7 +3278,6 @@ error:
         }
     }
     virConnectClose(conn);
-    virObjectUnref(caps);
     virObjectUnref(cfg);
 }

@@ -3539,7 +3464,7 @@ int qemuProcessStart(virConnectPtr conn,
      * report implicit runtime defaults in the XML, like vnc listen/socket
      */
     VIR_DEBUG("Setting current domain def as transient");
-    if (virDomainObjSetDefTransient(caps, vm, true) < 0)
+    if (virDomainObjSetDefTransient(caps, driver->xmlconf, vm, true) < 0)
         goto cleanup;

     vm->def->id = qemuDriverAllocateID(driver);
@@ -3888,7 +3813,7 @@ int qemuProcessStart(virConnectPtr conn,
     }

     VIR_DEBUG("Writing early domain status to disk");
-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0) {
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0) {
         goto cleanup;
     }

@@ -4039,7 +3964,7 @@ int qemuProcessStart(virConnectPtr conn,
         goto cleanup;

     VIR_DEBUG("Writing domain status to disk");
-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         goto cleanup;

     /* finally we can call the 'started' hook script if any */
@@ -4394,7 +4319,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED,
      * report implicit runtime defaults in the XML, like vnc listen/socket
      */
     VIR_DEBUG("Setting current domain def as transient");
-    if (virDomainObjSetDefTransient(caps, vm, true) < 0)
+    if (virDomainObjSetDefTransient(caps, driver->xmlconf, vm, true) < 0)
         goto cleanup;

     vm->def->id = qemuDriverAllocateID(driver);
@@ -4538,7 +4463,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED,
         virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, reason);

     VIR_DEBUG("Writing domain status to disk");
-    if (virDomainSaveStatus(caps, cfg->stateDir, vm) < 0)
+    if (virDomainSaveStatus(driver->xmlconf, cfg->stateDir, vm) < 0)
         goto cleanup;

     /* Run an hook to allow admins to do some magic */
-- 
1.8.1.5




More information about the libvir-list mailing list