[libvirt] [PATCH 27/40] Simplify the Xen domain scheduler parameter driver methods
Jim Fehlig
jfehlig at suse.com
Wed May 8 23:16:40 UTC 2013
Daniel P. Berrange wrote:
> 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,
> -};
> -
>
Ah, so my hypothesis in patch 18 was correct, we are down to zero now :).
ACK.
Regards,
Jim
> 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_ */
>
More information about the libvir-list
mailing list