[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