]> xenbits.xensource.com Git - libvirt.git/commitdiff
Simplify the Xen domain start driver method
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 30 Apr 2013 16:33:48 +0000 (17:33 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Thu, 9 May 2013 12:16:20 +0000 (13:16 +0100)
Directly call either the XenD or XM driver when starting
a persistent domain

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
src/xen/xen_driver.c
src/xen/xen_driver.h
src/xen/xend_internal.c
src/xen/xm_internal.c

index d04fe16ab83b59d124d9b6e7393094fa987bbc6c..e504578fdb1bb489bccb5003d05893da544b9f4e 100644 (file)
@@ -1344,7 +1344,6 @@ static int
 xenUnifiedDomainCreateWithFlags(virDomainPtr dom, unsigned int flags)
 {
     xenUnifiedPrivatePtr priv = dom->conn->privateData;
-    int i;
     int ret = -1;
     char *name = NULL;
 
@@ -1355,21 +1354,16 @@ xenUnifiedDomainCreateWithFlags(virDomainPtr dom, unsigned int flags)
         goto cleanup;
 
     if (virFileExists(name)) {
-        if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) {
-            ret = xenDaemonDomainRestore(dom->conn, name);
-            if (ret == 0)
-                unlink(name);
-        }
+        ret = xenDaemonDomainRestore(dom->conn, name);
+        if (ret == 0)
+            unlink(name);
         goto cleanup;
     }
 
-    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) {
-        if (priv->opened[i] && drivers[i]->xenDomainCreate &&
-            drivers[i]->xenDomainCreate(dom) == 0) {
-            ret = 0;
-            goto cleanup;
-        }
-    }
+    if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
+        ret = xenXMDomainCreate(dom);
+    else
+        ret = xenDaemonDomainCreate(dom);
 
 cleanup:
     VIR_FREE(name);
index c756dded27b4806de51230b4d3ef00fd89a7b4e3..e2c0d6882b17aa32e84dd472a987912d0fa1b920 100644 (file)
@@ -93,7 +93,6 @@ extern int xenRegister (void);
  * structure with direct calls in xen_unified.c.
  */
 struct xenUnifiedDriver {
-    virDrvDomainCreate xenDomainCreate;
     virDrvDomainDefineXML xenDomainDefineXML;
     virDrvDomainUndefine xenDomainUndefine;
     virDrvDomainAttachDeviceFlags xenDomainAttachDeviceFlags;
index 55e2197568a45605ea81868dc8911e7f643d7886..53f87d69806087af65200da17e5bf06f56fc6f7d 100644 (file)
@@ -2898,23 +2898,17 @@ xenDaemonDomainDefineXML(virConnectPtr conn, const char *xmlDesc)
 int
 xenDaemonDomainCreate(virDomainPtr domain)
 {
-    xenUnifiedPrivatePtr priv = domain->conn->privateData;
     int ret;
-    virDomainPtr tmp;
-
-    if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
-        return -1;
 
     ret = xend_op(domain->conn, domain->name, "op", "start", NULL);
 
-    if (ret != -1) {
-        /* Need to force a refresh of this object's ID */
-        tmp = virDomainLookupByName(domain->conn, domain->name);
-        if (tmp) {
-            domain->id = tmp->id;
-            virDomainFree(tmp);
-        }
+    if (ret == 0) {
+        int id = xenDaemonDomainLookupByName_ids(domain->conn, domain->name,
+                                                 domain->uuid);
+        if (id > 0)
+            domain->id = id;
     }
+
     return ret;
 }
 
@@ -3376,7 +3370,6 @@ xenDaemonDomainBlockPeek(virDomainPtr domain,
 }
 
 struct xenUnifiedDriver xenDaemonDriver = {
-    .xenDomainCreate = xenDaemonDomainCreate,
     .xenDomainDefineXML = xenDaemonDomainDefineXML,
     .xenDomainUndefine = xenDaemonDomainUndefine,
     .xenDomainAttachDeviceFlags = xenDaemonAttachDeviceFlags,
index d7099cfbc0307d004fa8cd288534b4cc36a04212..ac452c481b2751261ed7257987e91fab284ce47e 100644 (file)
@@ -81,7 +81,6 @@ static int xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml,
 #define XM_XML_ERROR "Invalid xml"
 
 struct xenUnifiedDriver xenXMDriver = {
-    .xenDomainCreate = xenXMDomainCreate,
     .xenDomainDefineXML = xenXMDomainDefineXML,
     .xenDomainUndefine = xenXMDomainUndefine,
     .xenDomainAttachDeviceFlags = xenXMDomainAttachDeviceFlags,
@@ -918,9 +917,6 @@ xenXMDomainCreate(virDomainPtr domain)
     const char *filename;
     xenXMConfCachePtr entry;
 
-    if (domain->id != -1)
-        return -1;
-
     xenUnifiedLock(priv);
 
     if (!(filename = virHashLookup(priv->nameConfigMap, domain->name)))