[libvirt] [PATCH 27/40] Simplify the Xen domain scheduler parameter driver methods

Daniel P. Berrange berrange at redhat.com
Thu May 2 15:18:41 UTC 2013


From: "Daniel P. Berrange" <berrange at redhat.com>

Make the Xen domain scheduler parameter methods directly
call into XenD or Xen hypervisor drivers

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 src/xen/xen_driver.c     | 54 +++++++++++++++++++++---------------------------
 src/xen/xen_driver.h     | 15 --------------
 src/xen/xen_hypervisor.c | 25 ----------------------
 src/xen/xen_hypervisor.h |  1 -
 src/xen/xend_internal.c  | 12 +++--------
 src/xen/xend_internal.h  | 12 +++++++----
 6 files changed, 35 insertions(+), 84 deletions(-)

diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index 2262713..ac61677 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
@@ -80,12 +80,6 @@ xenUnifiedDomainGetVcpus(virDomainPtr dom,
                          unsigned char *cpumaps, int maplen);
 
 
-/* The five Xen drivers below us. */
-static struct xenUnifiedDriver const * const drivers[XEN_UNIFIED_NR_DRIVERS] = {
-    [XEN_UNIFIED_HYPERVISOR_OFFSET] = &xenHypervisorDriver,
-    [XEN_UNIFIED_XEND_OFFSET] = &xenDaemonDriver,
-};
-
 static bool inside_daemon = false;
 
 /**
@@ -1503,17 +1497,17 @@ static char *
 xenUnifiedDomainGetSchedulerType(virDomainPtr dom, int *nparams)
 {
     xenUnifiedPrivatePtr priv = dom->conn->privateData;
-    int i;
-    char *schedulertype;
 
-    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; i++) {
-        if (priv->opened[i] && drivers[i]->xenDomainGetSchedulerType) {
-            schedulertype = drivers[i]->xenDomainGetSchedulerType(dom, nparams);
-            if (schedulertype != NULL)
-                return schedulertype;
+    if (dom->id < 0) {
+        if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                           _("Cannot change scheduler parameters"));
+            return NULL;
         }
+        return xenDaemonGetSchedulerType(dom, nparams);
+    } else {
+        return xenHypervisorGetSchedulerType(dom, nparams);
     }
-    return NULL;
 }
 
 static int
@@ -1523,18 +1517,19 @@ xenUnifiedDomainGetSchedulerParametersFlags(virDomainPtr dom,
                                             unsigned int flags)
 {
     xenUnifiedPrivatePtr priv = dom->conn->privateData;
-    int i, ret;
 
     virCheckFlags(0, -1);
 
-    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) {
-        if (priv->opened[i] && drivers[i]->xenDomainGetSchedulerParameters) {
-           ret = drivers[i]->xenDomainGetSchedulerParameters(dom, params, nparams);
-           if (ret == 0)
-               return 0;
+    if (dom->id < 0) {
+        if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                           _("Cannot change scheduler parameters"));
+            return -1;
         }
+        return xenDaemonGetSchedulerParameters(dom, params, nparams);
+    } else {
+        return xenHypervisorGetSchedulerParameters(dom, params, nparams);
     }
-    return -1;
 }
 
 static int
@@ -1553,20 +1548,19 @@ xenUnifiedDomainSetSchedulerParametersFlags(virDomainPtr dom,
                                             unsigned int flags)
 {
     xenUnifiedPrivatePtr priv = dom->conn->privateData;
-    int i, ret;
 
     virCheckFlags(0, -1);
 
-    /* do the hypervisor call last to get better error */
-    for (i = XEN_UNIFIED_NR_DRIVERS - 1; i >= 0; i--) {
-        if (priv->opened[i] && drivers[i]->xenDomainSetSchedulerParameters) {
-           ret = drivers[i]->xenDomainSetSchedulerParameters(dom, params, nparams);
-           if (ret == 0)
-               return 0;
+    if (dom->id < 0) {
+        if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                           _("Cannot change scheduler parameters"));
+            return -1;
         }
+        return xenDaemonSetSchedulerParameters(dom, params, nparams);
+    } else {
+        return xenHypervisorSetSchedulerParameters(dom, params, nparams);
     }
-
-    return -1;
 }
 
 static int
diff --git a/src/xen/xen_driver.h b/src/xen/xen_driver.h
index e8c2958..e33610d 100644
--- a/src/xen/xen_driver.h
+++ b/src/xen/xen_driver.h
@@ -82,21 +82,6 @@ extern int xenRegister (void);
      VIR_MIGRATE_PAUSED |                       \
      VIR_MIGRATE_PERSIST_DEST)
 
-/* _xenUnifiedDriver:
- *
- * Entry points into the underlying Xen drivers.  This structure
- * will eventually go away and instead xen unified will make direct
- * calls to the underlying Xen drivers.
- *
- * To reiterate - the goal is to remove elements from this structure
- * until it is empty, replacing indirect calls through this
- * structure with direct calls in xen_unified.c.
- */
-struct xenUnifiedDriver {
-    virDrvDomainGetSchedulerType xenDomainGetSchedulerType;
-    virDrvDomainGetSchedulerParameters xenDomainGetSchedulerParameters;
-    virDrvDomainSetSchedulerParameters xenDomainSetSchedulerParameters;
-};
 
 typedef struct xenXMConfCache *xenXMConfCachePtr;
 typedef struct xenXMConfCache {
diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c
index df2a93f..d7b7cfc 100644
--- a/src/xen/xen_hypervisor.c
+++ b/src/xen/xen_hypervisor.c
@@ -849,12 +849,6 @@ typedef struct xen_op_v2_dom xen_op_v2_dom;
 # error "unsupported platform"
 #endif
 
-struct xenUnifiedDriver xenHypervisorDriver = {
-    .xenDomainGetSchedulerType = xenHypervisorGetSchedulerType,
-    .xenDomainGetSchedulerParameters = xenHypervisorGetSchedulerParameters,
-    .xenDomainSetSchedulerParameters = xenHypervisorSetSchedulerParameters,
-};
-
 /**
  * xenHypervisorDoV0Op:
  * @handle: the handle to the Xen hypervisor
@@ -1124,12 +1118,6 @@ xenHypervisorGetSchedulerType(virDomainPtr domain, int *nparams)
     char *schedulertype = NULL;
     xenUnifiedPrivatePtr priv = domain->conn->privateData;
 
-    if (domain->id < 0) {
-        virReportError(VIR_ERR_OPERATION_INVALID,
-                       "%s", _("domain is not running"));
-        return NULL;
-    }
-
     /*
      * Support only hv_versions.dom_interface >=5
      * (Xen3.1.0 or later)
@@ -1194,13 +1182,6 @@ xenHypervisorGetSchedulerParameters(virDomainPtr domain,
 {
     xenUnifiedPrivatePtr priv = domain->conn->privateData;
 
-
-    if (domain->id < 0) {
-        virReportError(VIR_ERR_OPERATION_INVALID,
-                       "%s", _("domain is not running"));
-        return -1;
-    }
-
     /*
      * Support only hv_versions.dom_interface >=5
      * (Xen3.1.0 or later)
@@ -1303,12 +1284,6 @@ xenHypervisorSetSchedulerParameters(virDomainPtr domain,
                                        NULL) < 0)
         return -1;
 
-    if (domain->id < 0) {
-        virReportError(VIR_ERR_OPERATION_INVALID,
-                       "%s", _("domain is not running"));
-        return -1;
-    }
-
     /*
      * Support only hv_versions.dom_interface >=5
      * (Xen3.1.0 or later)
diff --git a/src/xen/xen_hypervisor.h b/src/xen/xen_hypervisor.h
index bd36bf7..8507bd0 100644
--- a/src/xen/xen_hypervisor.h
+++ b/src/xen/xen_hypervisor.h
@@ -36,7 +36,6 @@ struct xenHypervisorVersions {
     int dom_interface; /* -1,3,4,5,6,7 */
 };
 
-extern struct xenUnifiedDriver xenHypervisorDriver;
 int xenHypervisorInit(struct xenHypervisorVersions *override_versions);
 
 virCapsPtr xenHypervisorMakeCapabilities (virConnectPtr conn);
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index 49ef256..87b8875 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -2975,7 +2975,7 @@ error:
  * Returns a scheduler name (credit or sedf) which must be freed by the
  * caller or NULL in case of failure
  */
-static char *
+char *
 xenDaemonGetSchedulerType(virDomainPtr domain, int *nparams)
 {
     xenUnifiedPrivatePtr priv = domain->conn->privateData;
@@ -3040,7 +3040,7 @@ error:
  *
  * Returns 0 or -1 in case of failure
  */
-static int
+int
 xenDaemonGetSchedulerParameters(virDomainPtr domain,
                                 virTypedParameterPtr params,
                                 int *nparams)
@@ -3142,7 +3142,7 @@ error:
  *
  * Returns 0 or -1 in case of failure
  */
-static int
+int
 xenDaemonSetSchedulerParameters(virDomainPtr domain,
                                 virTypedParameterPtr params,
                                 int nparams)
@@ -3331,12 +3331,6 @@ xenDaemonDomainBlockPeek(virDomainPtr domain,
     return ret;
 }
 
-struct xenUnifiedDriver xenDaemonDriver = {
-    .xenDomainGetSchedulerType = xenDaemonGetSchedulerType,
-    .xenDomainGetSchedulerParameters = xenDaemonGetSchedulerParameters,
-    .xenDomainSetSchedulerParameters = xenDaemonSetSchedulerParameters,
-};
-
 
 /**
  * virDomainXMLDevID:
diff --git a/src/xen/xend_internal.h b/src/xen/xend_internal.h
index 4a8578b..7332303 100644
--- a/src/xen/xend_internal.h
+++ b/src/xen/xend_internal.h
@@ -148,10 +148,6 @@ int xenDaemonDomainGetAutostart          (virDomainPtr dom,
 int xenDaemonDomainSetAutostart          (virDomainPtr domain,
                                           int autostart);
 
-/* xen_unified calls through here. */
-extern struct xenUnifiedDriver xenDaemonDriver;
-int xenDaemonInit (void);
-
 virDomainPtr xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc);
 virDomainPtr xenDaemonLookupByUUID(virConnectPtr conn, const unsigned char *uuid);
 virDomainPtr xenDaemonLookupByName(virConnectPtr conn, const char *domname);
@@ -160,4 +156,12 @@ int xenDaemonDomainMigratePerform (virDomainPtr domain, const char *cookie, int
 
 int xenDaemonDomainBlockPeek (virDomainPtr domain, const char *path, unsigned long long offset, size_t size, void *buffer);
 
+char * xenDaemonGetSchedulerType(virDomainPtr domain, int *nparams);
+int xenDaemonGetSchedulerParameters(virDomainPtr domain,
+                                    virTypedParameterPtr params,
+                                    int *nparams);
+int xenDaemonSetSchedulerParameters(virDomainPtr domain,
+                                    virTypedParameterPtr params,
+                                    int nparams);
+
 #endif /* __XEND_INTERNAL_H_ */
-- 
1.8.1.4




More information about the libvir-list mailing list