From: "Marek Marczykowski-Górecki" <marmarek@invisiblethingslab.com>
To: xen-devel@lists.xen.org
Cc: Wei Liu <wei.liu2@citrix.com>,
Ian Jackson <ian.jackson@eu.citrix.com>,
Marcus of Wetware Labs <marcus@wetwa.re>
Subject: Re: [PATCH v2] libxl: allow libxl_domain_suspend to simply suspend a domain, without saving it
Date: Wed, 21 Mar 2018 17:08:41 +0100 [thread overview]
Message-ID: <20180321160841.GQ7364@mail-itl> (raw)
In-Reply-To: <20180314143608.22615-1-marmarek@invisiblethingslab.com>
[-- Attachment #1.1: Type: text/plain, Size: 4737 bytes --]
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@invisiblethingslab.com>
> Signed-off-by: Marcus of Wetware Labs <marcus@wetwa.re>
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 #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
[-- Attachment #2: Type: text/plain, Size: 157 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2018-03-21 16:08 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-14 14:36 [PATCH v2] libxl: allow libxl_domain_suspend to simply suspend a domain, without saving it Marek Marczykowski-Górecki
2018-03-21 16:08 ` Marek Marczykowski-Górecki [this message]
2018-03-21 16:52 ` Wei Liu
2018-03-28 11:20 ` Ian Jackson
2018-04-04 15:42 ` Marek Marczykowski-Górecki
2018-04-04 15:45 ` Ian Jackson
2018-04-04 15:53 ` Marek Marczykowski-Górecki
2018-04-04 15:57 ` Ian Jackson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180321160841.GQ7364@mail-itl \
--to=marmarek@invisiblethingslab.com \
--cc=ian.jackson@eu.citrix.com \
--cc=marcus@wetwa.re \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.