[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v4 6/9] libxl: add libxl__domain_soft_reset_destroy_old()



On Wed, Dec 03, 2014 at 06:16:18PM +0100, Vitaly Kuznetsov wrote:
> New libxl__domain_soft_reset_destroy_old() is an internal-only
> version of libxl_domain_destroy() which follows the same domain
> destroy path with the only difference: xc_domain_destroy() is
> being avoided so the domain is not actually being destroyed.
> 
> Add soft_reset flag to libxl__domain_destroy_state structure
> to support the change.
> 
> The original libxl_domain_destroy() function could be easily
> modified to support new flag but I'm trying to avoid that as
> it is part of public API.
> 
> Signed-off-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx>
> ---
>  tools/libxl/libxl.c          | 32 +++++++++++++++++++++++++++-----
>  tools/libxl/libxl_internal.h |  4 ++++
>  2 files changed, 31 insertions(+), 5 deletions(-)
> 
> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
> index f84f7c2..c2bd730 100644
> --- a/tools/libxl/libxl.c
> +++ b/tools/libxl/libxl.c
> @@ -1437,6 +1437,23 @@ int libxl_domain_destroy(libxl_ctx *ctx, uint32_t 
> domid,
>      return AO_INPROGRESS;
>  }
>  
> +int libxl__domain_soft_reset_destroy_old(libxl_ctx *ctx, uint32_t domid,
> +                                         const libxl_asyncop_how *ao_how)
> +{

Internal function takes gc, not ctx.

> +    AO_CREATE(ctx, domid, ao_how);

If you want to use libxl context, use CTX macro.

> +    libxl__domain_destroy_state *dds;
> +
> +    GCNEW(dds);
> +    dds->ao = ao;
> +    dds->domid = domid;
> +    dds->callback = domain_destroy_cb;
> +    dds->soft_reset = 1;
> +    libxl__domain_destroy(egc, dds);
> +
> +    return AO_INPROGRESS;
> +}
> +
> +
>  static void domain_destroy_cb(libxl__egc *egc, libxl__domain_destroy_state 
> *dds,
>                                int rc)
>  {
> @@ -1612,6 +1629,7 @@ static void devices_destroy_cb(libxl__egc *egc,
>  {
>      STATE_AO_GC(drs->ao);
>      libxl__destroy_domid_state *dis = CONTAINER_OF(drs, *dis, drs);
> +    libxl__domain_destroy_state *dds = CONTAINER_OF(dis, *dds, domain);
>      libxl_ctx *ctx = CTX;
>      uint32_t domid = dis->domid;
>      char *dom_path;
> @@ -1650,11 +1668,15 @@ static void devices_destroy_cb(libxl__egc *egc,
>      }
>      libxl__userdata_destroyall(gc, domid);
>  
> -    rc = xc_domain_destroy(ctx->xch, domid);
> -    if (rc < 0) {
> -        LIBXL__LOG_ERRNOVAL(ctx, LIBXL__LOG_ERROR, rc, "xc_domain_destroy 
> failed for %d", domid);
> -        rc = ERROR_FAIL;
> -        goto out;
> +    if (!dds->soft_reset)
> +    {

Coding style.

Wei.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.