]> xenbits.xensource.com Git - libvirt.git/commitdiff
Simplify the Xen domain attach/dettach driver methods
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 30 Apr 2013 16:43:07 +0000 (17:43 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Thu, 9 May 2013 12:16:20 +0000 (13:16 +0100)
Make the domain attach/dettach driver methods directly call
into either the XenD or XM drivers

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/xend_internal.h
src/xen/xm_internal.c
src/xen/xm_internal.h

index 341312da0a6b17eb7537c4a9c04157de6c146ede..6f779e66b85ade14ea70d6714c58329b792f0ff8 100644 (file)
@@ -84,7 +84,6 @@ xenUnifiedDomainGetVcpus(virDomainPtr dom,
 static struct xenUnifiedDriver const * const drivers[XEN_UNIFIED_NR_DRIVERS] = {
     [XEN_UNIFIED_HYPERVISOR_OFFSET] = &xenHypervisorDriver,
     [XEN_UNIFIED_XEND_OFFSET] = &xenDaemonDriver,
-    [XEN_UNIFIED_XM_OFFSET] = &xenXMDriver,
 };
 
 static bool is_privileged = false;
@@ -1408,7 +1407,6 @@ static int
 xenUnifiedDomainAttachDevice(virDomainPtr dom, const char *xml)
 {
     xenUnifiedPrivatePtr priv = dom->conn->privateData;
-    int i;
     unsigned int flags = VIR_DOMAIN_DEVICE_MODIFY_LIVE;
 
     /*
@@ -1416,14 +1414,13 @@ xenUnifiedDomainAttachDevice(virDomainPtr dom, const char *xml)
      * config without touching persistent config, we add the extra flag here
      * to make this API work
      */
-    if (priv->opened[XEN_UNIFIED_XEND_OFFSET] &&
-        priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
+    if (priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
         flags |= VIR_DOMAIN_DEVICE_MODIFY_CONFIG;
 
-    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
-        if (priv->opened[i] && drivers[i]->xenDomainAttachDeviceFlags &&
-            drivers[i]->xenDomainAttachDeviceFlags(dom, xml, flags) == 0)
-            return 0;
+    if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
+        return xenXMDomainAttachDeviceFlags(dom, xml, flags);
+    else
+        return xenDaemonAttachDeviceFlags(dom, xml, flags);
 
     return -1;
 }
@@ -1433,21 +1430,17 @@ xenUnifiedDomainAttachDeviceFlags(virDomainPtr dom, const char *xml,
                                   unsigned int flags)
 {
     xenUnifiedPrivatePtr priv = dom->conn->privateData;
-    int i;
 
-    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
-        if (priv->opened[i] && drivers[i]->xenDomainAttachDeviceFlags &&
-            drivers[i]->xenDomainAttachDeviceFlags(dom, xml, flags) == 0)
-            return 0;
-
-    return -1;
+    if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
+        return xenXMDomainAttachDeviceFlags(dom, xml, flags);
+    else
+        return xenDaemonAttachDeviceFlags(dom, xml, flags);
 }
 
 static int
 xenUnifiedDomainDetachDevice(virDomainPtr dom, const char *xml)
 {
     xenUnifiedPrivatePtr priv = dom->conn->privateData;
-    int i;
     unsigned int flags = VIR_DOMAIN_DEVICE_MODIFY_LIVE;
 
     /*
@@ -1455,16 +1448,13 @@ xenUnifiedDomainDetachDevice(virDomainPtr dom, const char *xml)
      * config without touching persistent config, we add the extra flag here
      * to make this API work
      */
-    if (priv->opened[XEN_UNIFIED_XEND_OFFSET] &&
-        priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
+    if (priv->xendConfigVersion >= XEND_CONFIG_VERSION_3_0_4)
         flags |= VIR_DOMAIN_DEVICE_MODIFY_CONFIG;
 
-    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
-        if (priv->opened[i] && drivers[i]->xenDomainDetachDeviceFlags &&
-            drivers[i]->xenDomainDetachDeviceFlags(dom, xml, flags) == 0)
-            return 0;
-
-    return -1;
+    if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
+        return xenXMDomainDetachDeviceFlags(dom, xml, flags);
+    else
+        return xenDaemonDetachDeviceFlags(dom, xml, flags);
 }
 
 static int
@@ -1472,25 +1462,18 @@ xenUnifiedDomainDetachDeviceFlags(virDomainPtr dom, const char *xml,
                                   unsigned int flags)
 {
     xenUnifiedPrivatePtr priv = dom->conn->privateData;
-    int i;
-
-    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
-        if (priv->opened[i] && drivers[i]->xenDomainDetachDeviceFlags &&
-            drivers[i]->xenDomainDetachDeviceFlags(dom, xml, flags) == 0)
-            return 0;
 
-    return -1;
+    if (dom->id < 0 && priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4)
+        return xenXMDomainDetachDeviceFlags(dom, xml, flags);
+    else
+        return xenDaemonDetachDeviceFlags(dom, xml, flags);
 }
 
 static int
 xenUnifiedDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml,
                                   unsigned int flags)
 {
-    xenUnifiedPrivatePtr priv = dom->conn->privateData;
-
-    if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
-        return xenDaemonUpdateDeviceFlags(dom, xml, flags);
-    return -1;
+    return xenDaemonUpdateDeviceFlags(dom, xml, flags);
 }
 
 static int
index 254c2f52b5021e3fde9bdd2d3907ab6fdc8a3e86..e8c2958221961c55d154d508928f653b4bbaff66 100644 (file)
@@ -93,8 +93,6 @@ extern int xenRegister (void);
  * structure with direct calls in xen_unified.c.
  */
 struct xenUnifiedDriver {
-    virDrvDomainAttachDeviceFlags xenDomainAttachDeviceFlags;
-    virDrvDomainDetachDeviceFlags xenDomainDetachDeviceFlags;
     virDrvDomainGetSchedulerType xenDomainGetSchedulerType;
     virDrvDomainGetSchedulerParameters xenDomainGetSchedulerParameters;
     virDrvDomainSetSchedulerParameters xenDomainSetSchedulerParameters;
index 9efe26ec51a0664f6c25fe8a33ec75c6b702e990..39019121c21de01145f849a06d9d6c127cabda0d 100644 (file)
@@ -2195,7 +2195,7 @@ xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc)
  *
  * Returns 0 in case of success, -1 in case of failure.
  */
-static int
+int
 xenDaemonAttachDeviceFlags(virDomainPtr domain,
                            const char *xml,
                            unsigned int flags)
@@ -2218,13 +2218,6 @@ xenDaemonAttachDeviceFlags(virDomainPtr domain,
                            _("Cannot modify live config if domain is inactive"));
             return -1;
         }
-        /* If xendConfigVersion < 3 only live config can be changed */
-        if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
-            virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                           _("Xend version does not support modifying "
-                           "persistent config"));
-            return -1;
-        }
     } else {
         /* Only live config can be changed if xendConfigVersion < 3 */
         if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 &&
@@ -2378,13 +2371,6 @@ xenDaemonUpdateDeviceFlags(virDomainPtr domain,
                            _("Cannot modify live config if domain is inactive"));
             return -1;
         }
-        /* If xendConfigVersion < 3 only live config can be changed */
-        if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
-            virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                           _("Xend version does not support modifying "
-                           "persistent config"));
-            return -1;
-        }
     } else {
         /* Only live config can be changed if xendConfigVersion < 3 */
         if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 &&
@@ -2463,7 +2449,7 @@ cleanup:
  *
  * Returns 0 in case of success, -1 in case of failure.
  */
-static int
+int
 xenDaemonDetachDeviceFlags(virDomainPtr domain,
                            const char *xml,
                            unsigned int flags)
@@ -2485,13 +2471,6 @@ xenDaemonDetachDeviceFlags(virDomainPtr domain,
                            _("Cannot modify live config if domain is inactive"));
             return -1;
         }
-        /* If xendConfigVersion < 3 only live config can be changed */
-        if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
-            virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                           _("Xend version does not support modifying "
-                             "persistent config"));
-            return -1;
-        }
     } else {
         /* Only live config can be changed if xendConfigVersion < 3 */
         if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4 &&
@@ -3362,8 +3341,6 @@ xenDaemonDomainBlockPeek(virDomainPtr domain,
 }
 
 struct xenUnifiedDriver xenDaemonDriver = {
-    .xenDomainAttachDeviceFlags = xenDaemonAttachDeviceFlags,
-    .xenDomainDetachDeviceFlags = xenDaemonDetachDeviceFlags,
     .xenDomainGetSchedulerType = xenDaemonGetSchedulerType,
     .xenDomainGetSchedulerParameters = xenDaemonGetSchedulerParameters,
     .xenDomainSetSchedulerParameters = xenDaemonSetSchedulerParameters,
index 4dc97bbe89cae8f8977b807e80f8cfca90c0ab2e..4a8578b863b07efb0b048c757080f50db5e8f6df 100644 (file)
@@ -114,6 +114,13 @@ int xenDaemonListDefinedDomains(virConnectPtr conn,
                                 char **const names,
                                 int maxnames);
 
+int xenDaemonAttachDeviceFlags(virDomainPtr domain,
+                               const char *xml,
+                               unsigned int flags);
+int xenDaemonDetachDeviceFlags(virDomainPtr domain,
+                               const char *xml,
+                               unsigned int flags);
+
 virDomainPtr xenDaemonDomainDefineXML(virConnectPtr xend, const char *sexpr);
 int xenDaemonDomainCreate(virDomainPtr domain);
 int xenDaemonDomainUndefine(virDomainPtr domain);
index 2785b0b3f021ce5775b5975758ecee52f000a7a2..66bd28942fda43850a69bd20152fc4dca2f42538 100644 (file)
 #define XEN_MAX_PHYSICAL_CPU 1024
 
 char * xenXMAutoAssignMac(void);
-static int xenXMDomainAttachDeviceFlags(virDomainPtr domain, const char *xml,
-                                        unsigned int flags);
-static int xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml,
-                                        unsigned int flags);
 
 #define XM_REFRESH_INTERVAL 10
 
@@ -80,11 +76,6 @@ static int xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml,
 #define QEMU_IF_SCRIPT "qemu-ifup"
 #define XM_XML_ERROR "Invalid xml"
 
-struct xenUnifiedDriver xenXMDriver = {
-    .xenDomainAttachDeviceFlags = xenXMDomainAttachDeviceFlags,
-    .xenDomainDetachDeviceFlags = xenXMDomainDetachDeviceFlags,
-};
-
 #ifndef WITH_XEN_INOTIFY
 static int xenInotifyActive(virConnectPtr conn ATTRIBUTE_UNUSED)
 {
@@ -1236,7 +1227,7 @@ cleanup:
  *
  * Returns 0 in case of success, -1 in case of failure.
  */
-static int
+int
 xenXMDomainAttachDeviceFlags(virDomainPtr domain,
                              const char *xml,
                              unsigned int flags)
@@ -1326,7 +1317,7 @@ xenXMDomainAttachDeviceFlags(virDomainPtr domain,
  *
  * Returns 0 in case of success, -1 in case of failure.
  */
-static int
+int
 xenXMDomainDetachDeviceFlags(virDomainPtr domain,
                              const char *xml,
                              unsigned int flags)
index 2a5d8684e081430a518eaaee56e7c65876ae97f8..eda73948a6658e5e3bb18bc00c777691b86d7a12 100644 (file)
@@ -30,8 +30,6 @@
 # include "virconf.h"
 # include "domain_conf.h"
 
-extern struct xenUnifiedDriver xenXMDriver;
-
 int xenXMConfigCacheRefresh (virConnectPtr conn);
 int xenXMConfigCacheAddFile(virConnectPtr conn, const char *filename);
 int xenXMConfigCacheRemoveFile(virConnectPtr conn, const char *filename);
@@ -69,4 +67,12 @@ int xenXMDomainBlockPeek (virDomainPtr dom, const char *path, unsigned long long
 int xenXMDomainGetAutostart(virDomainPtr dom, int *autostart);
 int xenXMDomainSetAutostart(virDomainPtr dom, int autostart);
 
+int xenXMDomainAttachDeviceFlags(virDomainPtr domain,
+                                 const char *xml,
+                                 unsigned int flags);
+
+int xenXMDomainDetachDeviceFlags(virDomainPtr domain,
+                                 const char *xml,
+                                 unsigned int flags);
+
 #endif