Simplify the Xen domain scheduler parameter driver methods

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

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrange 2013-04-30 17:52:19 +01:00
parent 758aea3098
commit a8f3222a40
6 changed files with 35 additions and 84 deletions

View File

@ -80,12 +80,6 @@ xenUnifiedDomainGetVcpus(virDomainPtr dom,
unsigned char *cpumaps, int maplen); 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 is_privileged = false; static bool is_privileged = false;
/** /**
@ -1514,18 +1508,18 @@ static char *
xenUnifiedDomainGetSchedulerType(virDomainPtr dom, int *nparams) xenUnifiedDomainGetSchedulerType(virDomainPtr dom, int *nparams)
{ {
xenUnifiedPrivatePtr priv = dom->conn->privateData; xenUnifiedPrivatePtr priv = dom->conn->privateData;
int i;
char *schedulertype;
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; i++) { if (dom->id < 0) {
if (priv->opened[i] && drivers[i]->xenDomainGetSchedulerType) { if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
schedulertype = drivers[i]->xenDomainGetSchedulerType(dom, nparams); virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
if (schedulertype != NULL) _("Cannot change scheduler parameters"));
return schedulertype;
}
}
return NULL; return NULL;
} }
return xenDaemonGetSchedulerType(dom, nparams);
} else {
return xenHypervisorGetSchedulerType(dom, nparams);
}
}
static int static int
xenUnifiedDomainGetSchedulerParametersFlags(virDomainPtr dom, xenUnifiedDomainGetSchedulerParametersFlags(virDomainPtr dom,
@ -1534,19 +1528,20 @@ xenUnifiedDomainGetSchedulerParametersFlags(virDomainPtr dom,
unsigned int flags) unsigned int flags)
{ {
xenUnifiedPrivatePtr priv = dom->conn->privateData; xenUnifiedPrivatePtr priv = dom->conn->privateData;
int i, ret;
virCheckFlags(0, -1); virCheckFlags(0, -1);
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) { if (dom->id < 0) {
if (priv->opened[i] && drivers[i]->xenDomainGetSchedulerParameters) { if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
ret = drivers[i]->xenDomainGetSchedulerParameters(dom, params, nparams); virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
if (ret == 0) _("Cannot change scheduler parameters"));
return 0;
}
}
return -1; return -1;
} }
return xenDaemonGetSchedulerParameters(dom, params, nparams);
} else {
return xenHypervisorGetSchedulerParameters(dom, params, nparams);
}
}
static int static int
xenUnifiedDomainGetSchedulerParameters(virDomainPtr dom, xenUnifiedDomainGetSchedulerParameters(virDomainPtr dom,
@ -1564,21 +1559,20 @@ xenUnifiedDomainSetSchedulerParametersFlags(virDomainPtr dom,
unsigned int flags) unsigned int flags)
{ {
xenUnifiedPrivatePtr priv = dom->conn->privateData; xenUnifiedPrivatePtr priv = dom->conn->privateData;
int i, ret;
virCheckFlags(0, -1); virCheckFlags(0, -1);
/* do the hypervisor call last to get better error */ if (dom->id < 0) {
for (i = XEN_UNIFIED_NR_DRIVERS - 1; i >= 0; i--) { if (priv->xendConfigVersion < XEND_CONFIG_VERSION_3_0_4) {
if (priv->opened[i] && drivers[i]->xenDomainSetSchedulerParameters) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
ret = drivers[i]->xenDomainSetSchedulerParameters(dom, params, nparams); _("Cannot change scheduler parameters"));
if (ret == 0)
return 0;
}
}
return -1; return -1;
} }
return xenDaemonSetSchedulerParameters(dom, params, nparams);
} else {
return xenHypervisorSetSchedulerParameters(dom, params, nparams);
}
}
static int static int
xenUnifiedDomainSetSchedulerParameters(virDomainPtr dom, xenUnifiedDomainSetSchedulerParameters(virDomainPtr dom,

View File

@ -82,21 +82,6 @@ extern int xenRegister (void);
VIR_MIGRATE_PAUSED | \ VIR_MIGRATE_PAUSED | \
VIR_MIGRATE_PERSIST_DEST) 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 *xenXMConfCachePtr;
typedef struct xenXMConfCache { typedef struct xenXMConfCache {

View File

@ -849,12 +849,6 @@ typedef struct xen_op_v2_dom xen_op_v2_dom;
# error "unsupported platform" # error "unsupported platform"
#endif #endif
struct xenUnifiedDriver xenHypervisorDriver = {
.xenDomainGetSchedulerType = xenHypervisorGetSchedulerType,
.xenDomainGetSchedulerParameters = xenHypervisorGetSchedulerParameters,
.xenDomainSetSchedulerParameters = xenHypervisorSetSchedulerParameters,
};
/** /**
* xenHypervisorDoV0Op: * xenHypervisorDoV0Op:
* @handle: the handle to the Xen hypervisor * @handle: the handle to the Xen hypervisor
@ -1124,12 +1118,6 @@ xenHypervisorGetSchedulerType(virDomainPtr domain, int *nparams)
char *schedulertype = NULL; char *schedulertype = NULL;
xenUnifiedPrivatePtr priv = domain->conn->privateData; 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 * Support only hv_versions.dom_interface >=5
* (Xen3.1.0 or later) * (Xen3.1.0 or later)
@ -1194,13 +1182,6 @@ xenHypervisorGetSchedulerParameters(virDomainPtr domain,
{ {
xenUnifiedPrivatePtr priv = domain->conn->privateData; 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 * Support only hv_versions.dom_interface >=5
* (Xen3.1.0 or later) * (Xen3.1.0 or later)
@ -1303,12 +1284,6 @@ xenHypervisorSetSchedulerParameters(virDomainPtr domain,
NULL) < 0) NULL) < 0)
return -1; 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 * Support only hv_versions.dom_interface >=5
* (Xen3.1.0 or later) * (Xen3.1.0 or later)

View File

@ -36,7 +36,6 @@ struct xenHypervisorVersions {
int dom_interface; /* -1,3,4,5,6,7 */ int dom_interface; /* -1,3,4,5,6,7 */
}; };
extern struct xenUnifiedDriver xenHypervisorDriver;
int xenHypervisorInit(struct xenHypervisorVersions *override_versions); int xenHypervisorInit(struct xenHypervisorVersions *override_versions);
virCapsPtr xenHypervisorMakeCapabilities (virConnectPtr conn); virCapsPtr xenHypervisorMakeCapabilities (virConnectPtr conn);

View File

@ -2984,7 +2984,7 @@ error:
* Returns a scheduler name (credit or sedf) which must be freed by the * Returns a scheduler name (credit or sedf) which must be freed by the
* caller or NULL in case of failure * caller or NULL in case of failure
*/ */
static char * char *
xenDaemonGetSchedulerType(virDomainPtr domain, int *nparams) xenDaemonGetSchedulerType(virDomainPtr domain, int *nparams)
{ {
xenUnifiedPrivatePtr priv = domain->conn->privateData; xenUnifiedPrivatePtr priv = domain->conn->privateData;
@ -3049,7 +3049,7 @@ error:
* *
* Returns 0 or -1 in case of failure * Returns 0 or -1 in case of failure
*/ */
static int int
xenDaemonGetSchedulerParameters(virDomainPtr domain, xenDaemonGetSchedulerParameters(virDomainPtr domain,
virTypedParameterPtr params, virTypedParameterPtr params,
int *nparams) int *nparams)
@ -3151,7 +3151,7 @@ error:
* *
* Returns 0 or -1 in case of failure * Returns 0 or -1 in case of failure
*/ */
static int int
xenDaemonSetSchedulerParameters(virDomainPtr domain, xenDaemonSetSchedulerParameters(virDomainPtr domain,
virTypedParameterPtr params, virTypedParameterPtr params,
int nparams) int nparams)
@ -3340,12 +3340,6 @@ xenDaemonDomainBlockPeek(virDomainPtr domain,
return ret; return ret;
} }
struct xenUnifiedDriver xenDaemonDriver = {
.xenDomainGetSchedulerType = xenDaemonGetSchedulerType,
.xenDomainGetSchedulerParameters = xenDaemonGetSchedulerParameters,
.xenDomainSetSchedulerParameters = xenDaemonSetSchedulerParameters,
};
/** /**
* virDomainXMLDevID: * virDomainXMLDevID:

View File

@ -148,10 +148,6 @@ int xenDaemonDomainGetAutostart (virDomainPtr dom,
int xenDaemonDomainSetAutostart (virDomainPtr domain, int xenDaemonDomainSetAutostart (virDomainPtr domain,
int autostart); int autostart);
/* xen_unified calls through here. */
extern struct xenUnifiedDriver xenDaemonDriver;
int xenDaemonInit (void);
virDomainPtr xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc); virDomainPtr xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc);
virDomainPtr xenDaemonLookupByUUID(virConnectPtr conn, const unsigned char *uuid); virDomainPtr xenDaemonLookupByUUID(virConnectPtr conn, const unsigned char *uuid);
virDomainPtr xenDaemonLookupByName(virConnectPtr conn, const char *domname); 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); 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_ */ #endif /* __XEND_INTERNAL_H_ */