[libvirt] [PATCH 14/40] Simplify the Xen domain destroy driver method

Jim Fehlig jfehlig at suse.com
Mon May 6 21:22:19 UTC 2013


Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
>
> Unconditionally call the xenDaemonDomainDestroyFlags API
> since the XenD driver is always available.
>
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
>  src/xen/xen_driver.c     | 19 +-----------
>  src/xen/xen_driver.h     |  1 -
>  src/xen/xen_hypervisor.c | 76 ------------------------------------------------
>  src/xen/xen_hypervisor.h |  5 ----
>  src/xen/xend_internal.c  | 13 ++-------
>  src/xen/xend_internal.h  |  2 +-
>  src/xen/xm_internal.c    |  2 +-
>  7 files changed, 6 insertions(+), 112 deletions(-)
>   

Lots of nice cleanup in this series. ACK.

Regards,
Jim

> diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
> index db13438..7827d70 100644
> --- a/src/xen/xen_driver.c
> +++ b/src/xen/xen_driver.c
> @@ -767,26 +767,9 @@ static int
>  xenUnifiedDomainDestroyFlags(virDomainPtr dom,
>                               unsigned int flags)
>  {
> -    xenUnifiedPrivatePtr priv = dom->conn->privateData;
> -    int i;
> -
>      virCheckFlags(0, -1);
>  
> -    /* Try non-hypervisor methods first, then hypervisor direct method
> -     * as a last resort.
> -     */
> -    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
> -        if (i != XEN_UNIFIED_HYPERVISOR_OFFSET &&
> -            priv->opened[i] &&
> -            drivers[i]->xenDomainDestroyFlags &&
> -            drivers[i]->xenDomainDestroyFlags(dom, flags) == 0)
> -            return 0;
> -
> -    if (priv->opened[XEN_UNIFIED_HYPERVISOR_OFFSET] &&
> -        xenHypervisorDestroyDomainFlags(dom, flags) == 0)
> -        return 0;
> -
> -    return -1;
> +    return xenDaemonDomainDestroy(dom);
>  }
>  
>  static int
> diff --git a/src/xen/xen_driver.h b/src/xen/xen_driver.h
> index b77067d..aff68f2 100644
> --- a/src/xen/xen_driver.h
> +++ b/src/xen/xen_driver.h
> @@ -94,7 +94,6 @@ extern int xenRegister (void);
>   */
>  struct xenUnifiedDriver {
>      virDrvConnectGetHostname xenGetHostname;
> -    virDrvDomainDestroyFlags xenDomainDestroyFlags;
>      virDrvDomainGetOSType xenDomainGetOSType;
>      virDrvDomainGetMaxMemory xenDomainGetMaxMemory;
>      virDrvDomainSetMaxMemory xenDomainSetMaxMemory;
> diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c
> index 71212eb..244bdee 100644
> --- a/src/xen/xen_hypervisor.c
> +++ b/src/xen/xen_hypervisor.c
> @@ -609,13 +609,6 @@ struct xen_v0_domainop {
>  typedef struct xen_v0_domainop xen_v0_domainop;
>  
>  /*
> - * The information for a destroydomain system hypercall
> - */
> -#define XEN_V0_OP_DESTROYDOMAIN	9
> -#define XEN_V1_OP_DESTROYDOMAIN	9
> -#define XEN_V2_OP_DESTROYDOMAIN	2
> -
> -/*
>   * The information for a pausedomain system hypercall
>   */
>  #define XEN_V0_OP_PAUSEDOMAIN	10
> @@ -880,7 +873,6 @@ typedef struct xen_op_v2_dom xen_op_v2_dom;
>  static unsigned long long xenHypervisorGetMaxMemory(virDomainPtr domain);
>  
>  struct xenUnifiedDriver xenHypervisorDriver = {
> -    .xenDomainDestroyFlags = xenHypervisorDestroyDomainFlags,
>      .xenDomainGetOSType = xenHypervisorDomainGetOSType,
>      .xenDomainGetMaxMemory = xenHypervisorGetMaxMemory,
>      .xenDomainSetMaxMemory = xenHypervisorSetMaxMemory,
> @@ -1486,45 +1478,6 @@ xenHypervisorDomainInterfaceStats(virDomainPtr dom,
>  
>  
>  /**
> - * virXen_destroydomain:
> - * @handle: the hypervisor handle
> - * @id: the domain id
> - *
> - * Do a low level hypercall to destroy the domain
> - *
> - * Returns 0 or -1 in case of failure
> - */
> -static int
> -virXen_destroydomain(int handle, int id)
> -{
> -    int ret = -1;
> -
> -    if (hv_versions.hypervisor > 1) {
> -        xen_op_v2_dom op;
> -
> -        memset(&op, 0, sizeof(op));
> -        op.cmd = XEN_V2_OP_DESTROYDOMAIN;
> -        op.domain = (domid_t) id;
> -        ret = xenHypervisorDoV2Dom(handle, &op);
> -    } else if (hv_versions.hypervisor == 1) {
> -        xen_op_v1 op;
> -
> -        memset(&op, 0, sizeof(op));
> -        op.cmd = XEN_V1_OP_DESTROYDOMAIN;
> -        op.u.domain.domain = (domid_t) id;
> -        ret = xenHypervisorDoV1Op(handle, &op);
> -    } else if (hv_versions.hypervisor == 0) {
> -        xen_op_v0 op;
> -
> -        memset(&op, 0, sizeof(op));
> -        op.cmd = XEN_V0_OP_DESTROYDOMAIN;
> -        op.u.domain.domain = (domid_t) id;
> -        ret = xenHypervisorDoV0Op(handle, &op);
> -    }
> -    return ret;
> -}
> -
> -/**
>   * virXen_setmaxmem:
>   * @handle: the hypervisor handle
>   * @id: the domain id
> @@ -3064,35 +3017,6 @@ xenHypervisorNodeGetCellsFreeMemory(virConnectPtr conn,
>  
>  
>  /**
> - * xenHypervisorDestroyDomainFlags:
> - * @domain: pointer to the domain block
> - * @flags: an OR'ed set of virDomainDestroyFlagsValues
> - *
> - * Do a hypervisor call to destroy the given domain
> - *
> - * Calling this function with no @flags set (equal to zero)
> - * is equivalent to calling xenHypervisorDestroyDomain.
> - *
> - * Returns 0 in case of success, -1 in case of error.
> - */
> -int
> -xenHypervisorDestroyDomainFlags(virDomainPtr domain, unsigned int flags)
> -{
> -    int ret;
> -    xenUnifiedPrivatePtr priv = domain->conn->privateData;
> -
> -    virCheckFlags(0, -1);
> -
> -    if (domain->id < 0)
> -        return -1;
> -
> -    ret = virXen_destroydomain(priv->handle, domain->id);
> -    if (ret < 0)
> -        return -1;
> -    return 0;
> -}
> -
> -/**
>   * xenHypervisorSetMaxMemory:
>   * @domain: pointer to the domain block
>   * @memory: the max memory size in kilobytes.
> diff --git a/src/xen/xen_hypervisor.h b/src/xen/xen_hypervisor.h
> index 812816d..450b4f1 100644
> --- a/src/xen/xen_hypervisor.h
> +++ b/src/xen/xen_hypervisor.h
> @@ -72,11 +72,6 @@ unsigned long
>                                           int id);
>  int     xenHypervisorGetMaxVcpus        (virConnectPtr conn,
>                                           const char *type);
> -int     xenHypervisorDestroyDomain      (virDomainPtr domain)
> -          ATTRIBUTE_NONNULL (1);
> -int     xenHypervisorDestroyDomainFlags (virDomainPtr domain,
> -                                         unsigned int flags)
> -          ATTRIBUTE_NONNULL (1);
>  int     xenHypervisorGetDomainInfo        (virDomainPtr domain,
>                                             virDomainInfoPtr info)
>            ATTRIBUTE_NONNULL (1);
> diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
> index 1cd810b..c759636 100644
> --- a/src/xen/xend_internal.c
> +++ b/src/xen/xend_internal.c
> @@ -1340,9 +1340,8 @@ xenDaemonDomainReboot(virDomainPtr domain)
>  }
>  
>  /**
> - * xenDaemonDomainDestroyFlags:
> + * xenDaemonDomainDestroy:
>   * @domain: pointer to the Domain block
> - * @flags: an OR'ed set of virDomainDestroyFlagsValues
>   *
>   * Abruptly halt the domain, the OS is not properly shutdown and the
>   * resources allocated for the domain are immediately freed, mounted
> @@ -1351,16 +1350,11 @@ xenDaemonDomainReboot(virDomainPtr domain)
>   * dying and will go away completely once all of the resources have been
>   * unmapped (usually from the backend devices).
>   *
> - * Calling this function with no @flags set (equal to zero)
> - * is equivalent to calling xenDaemonDomainDestroy.
> - *
>   * Returns 0 in case of success, -1 (with errno) in case of error.
>   */
>  int
> -xenDaemonDomainDestroyFlags(virDomainPtr domain, unsigned int flags)
> +xenDaemonDomainDestroy(virDomainPtr domain)
>  {
> -    virCheckFlags(0, -1);
> -
>      if (domain->id < 0) {
>          virReportError(VIR_ERR_OPERATION_INVALID,
>                         _("Domain %s isn't running."), domain->name);
> @@ -2237,7 +2231,7 @@ xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc)
>    error:
>      /* Make sure we don't leave a still-born domain around */
>      if (dom != NULL) {
> -        xenDaemonDomainDestroyFlags(dom, 0);
> +        xenDaemonDomainDestroy(dom);
>          virObjectUnref(dom);
>      }
>      virDomainDefFree(def);
> @@ -3447,7 +3441,6 @@ xenDaemonDomainBlockPeek(virDomainPtr domain,
>  }
>  
>  struct xenUnifiedDriver xenDaemonDriver = {
> -    .xenDomainDestroyFlags = xenDaemonDomainDestroyFlags,
>      .xenDomainGetOSType = xenDaemonDomainGetOSType,
>      .xenDomainGetMaxMemory = xenDaemonDomainGetMaxMemory,
>      .xenDomainSetMaxMemory = xenDaemonDomainSetMaxMemory,
> diff --git a/src/xen/xend_internal.h b/src/xen/xend_internal.h
> index 27e8fbd..d393ec8 100644
> --- a/src/xen/xend_internal.h
> +++ b/src/xen/xend_internal.h
> @@ -91,7 +91,7 @@ int xenDaemonDomainSuspend(virDomainPtr domain);
>  int xenDaemonDomainResume(virDomainPtr domain);
>  int xenDaemonDomainShutdown(virDomainPtr domain);
>  int xenDaemonDomainReboot(virDomainPtr domain);
> -int xenDaemonDomainDestroyFlags(virDomainPtr domain, unsigned int flags);
> +int xenDaemonDomainDestroy(virDomainPtr domain);
>  int xenDaemonDomainSave(virDomainPtr domain, const char *filename);
>  int xenDaemonDomainCoreDump(virDomainPtr domain, const char *filename,
>                              unsigned int flags);
> diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
> index 1b4d1cf..34339c5 100644
> --- a/src/xen/xm_internal.c
> +++ b/src/xen/xm_internal.c
> @@ -971,7 +971,7 @@ xenXMDomainCreate(virDomainPtr domain)
>  
>   error:
>      if (domain->id != -1) {
> -        xenDaemonDomainDestroyFlags(domain, 0);
> +        xenDaemonDomainDestroy(domain);
>          domain->id = -1;
>      }
>      xenUnifiedUnlock(priv);
>   




More information about the libvir-list mailing list