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;
/**
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
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
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
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 {
# error "unsupported platform"
#endif
-struct xenUnifiedDriver xenHypervisorDriver = {
- .xenDomainGetSchedulerType = xenHypervisorGetSchedulerType,
- .xenDomainGetSchedulerParameters = xenHypervisorGetSchedulerParameters,
- .xenDomainSetSchedulerParameters = xenHypervisorSetSchedulerParameters,
-};
-
/**
* xenHypervisorDoV0Op:
* @handle: the handle to the Xen hypervisor
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)
{
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)
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)
int dom_interface; /* -1,3,4,5,6,7 */
};
-extern struct xenUnifiedDriver xenHypervisorDriver;
int xenHypervisorInit(struct xenHypervisorVersions *override_versions);
virCapsPtr xenHypervisorMakeCapabilities (virConnectPtr conn);
* 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;
*
* Returns 0 or -1 in case of failure
*/
-static int
+int
xenDaemonGetSchedulerParameters(virDomainPtr domain,
virTypedParameterPtr params,
int *nparams)
*
* Returns 0 or -1 in case of failure
*/
-static int
+int
xenDaemonSetSchedulerParameters(virDomainPtr domain,
virTypedParameterPtr params,
int nparams)
return ret;
}
-struct xenUnifiedDriver xenDaemonDriver = {
- .xenDomainGetSchedulerType = xenDaemonGetSchedulerType,
- .xenDomainGetSchedulerParameters = xenDaemonGetSchedulerParameters,
- .xenDomainSetSchedulerParameters = xenDaemonSetSchedulerParameters,
-};
-
/**
* virDomainXMLDevID:
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);
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_ */