|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] libxl: allow libxl_domain_suspend to simply suspend a domain, without saving it
On Wed, Mar 14, 2018 at 03:36:08PM +0100, Marek Marczykowski-Górecki wrote:
> When LIBXL_SUSPEND_NO_SAVE flag is set, no savefile will be written, but
> the domain will still be suspended (but not destroyed). The main reason
> for this functionality is to suspend the host while some domains are
> running, potentially holding PCI devices. This will give a chance to a
> driver in such a domain to properly suspend the device.
>
> It would be better to have a separate function for this, but in fact it
> should be named libxl_domain_suspend, then the current one renamed to
> libxl_domain_save. Since that would break API compatibility, keep it in
> the same function.
>
> Signed-off-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Marcus of Wetware Labs <marcus@xxxxxxxx>
Bump?
Any chances to get it into 4.11?
> ---
> Changes in v2:
> - drop double initialization of dsps fields (libxl__domain_suspend_init
> is called)
> - use LIBXL_SUSPEND_NO_SAVE flag instead of fd=-1
> ---
> tools/libxl/libxl.h | 5 +++++
> tools/libxl/libxl_domain.c | 52
> +++++++++++++++++++++++++++++++++-------------
> 2 files changed, 42 insertions(+), 15 deletions(-)
>
> diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
> index eca0ea2c50..636db77c2b 100644
> --- a/tools/libxl/libxl.h
> +++ b/tools/libxl/libxl.h
> @@ -1469,6 +1469,11 @@ int libxl_domain_suspend(libxl_ctx *ctx, uint32_t
> domid, int fd,
> LIBXL_EXTERNAL_CALLERS_ONLY;
> #define LIBXL_SUSPEND_DEBUG 1
> #define LIBXL_SUSPEND_LIVE 2
> +/*
> + * Just transition the domain into suspended state, do not save its state to
> + * disk and do not destroy it. fd parameter is ignored.
> + */
> +#define LIBXL_SUSPEND_NO_SAVE 4
>
> /* @param suspend_cancel [from xenctrl.h:xc_domain_resume( @param fast )]
> * If this parameter is true, use co-operative resume. The guest
> diff --git a/tools/libxl/libxl_domain.c b/tools/libxl/libxl_domain.c
> index 13b1c73d40..0e9e245ce3 100644
> --- a/tools/libxl/libxl_domain.c
> +++ b/tools/libxl/libxl_domain.c
> @@ -486,6 +486,13 @@ static void domain_suspend_cb(libxl__egc *egc,
>
> }
>
> +static void domain_suspend_empty_cb(libxl__egc *egc,
> + libxl__domain_suspend_state *dss, int rc)
> +{
> + STATE_AO_GC(dss->ao);
> + libxl__ao_complete(egc,ao,rc);
> +}
> +
> int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd, int flags,
> const libxl_asyncop_how *ao_how)
> {
> @@ -498,25 +505,40 @@ int libxl_domain_suspend(libxl_ctx *ctx, uint32_t
> domid, int fd, int flags,
> goto out_err;
> }
>
> - libxl__domain_save_state *dss;
> - GCNEW(dss);
> + if (!(flags & LIBXL_SUSPEND_NO_SAVE)) {
> + libxl__domain_save_state *dss;
>
> - dss->ao = ao;
> - dss->callback = domain_suspend_cb;
> + GCNEW(dss);
>
> - dss->domid = domid;
> - dss->fd = fd;
> - dss->type = type;
> - dss->live = flags & LIBXL_SUSPEND_LIVE;
> - dss->debug = flags & LIBXL_SUSPEND_DEBUG;
> - dss->checkpointed_stream = LIBXL_CHECKPOINTED_STREAM_NONE;
> + dss->ao = ao;
> + dss->callback = domain_suspend_cb;
> +
> + dss->domid = domid;
> + dss->fd = fd;
> + dss->type = type;
> + dss->live = flags & LIBXL_SUSPEND_LIVE;
> + dss->debug = flags & LIBXL_SUSPEND_DEBUG;
> + dss->checkpointed_stream = LIBXL_CHECKPOINTED_STREAM_NONE;
> +
> + rc = libxl__fd_flags_modify_save(gc, dss->fd,
> + ~(O_NONBLOCK|O_NDELAY), 0,
> + &dss->fdfl);
> + if (rc < 0) goto out_err;
>
> - rc = libxl__fd_flags_modify_save(gc, dss->fd,
> - ~(O_NONBLOCK|O_NDELAY), 0,
> - &dss->fdfl);
> - if (rc < 0) goto out_err;
> + libxl__domain_save(egc, dss);
> + } else {
> + libxl__domain_suspend_state *dsps;
> +
> + GCNEW(dsps);
> + dsps->ao = ao;
> + dsps->domid = domid;
> + dsps->type = type;
> + rc = libxl__domain_suspend_init(egc, dsps, type);
> + if (rc < 0) goto out_err;
> + dsps->callback_common_done = domain_suspend_empty_cb;
> + libxl__domain_suspend(egc, dsps);
> + }
>
> - libxl__domain_save(egc, dss);
> return AO_INPROGRESS;
>
> out_err:
--
Best Regards,
Marek Marczykowski-Górecki
Invisible Things Lab
A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
Attachment:
signature.asc _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |