All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ian Campbell <ian.campbell@citrix.com>
To: Yang Hongyang <yanghy@cn.fujitsu.com>
Cc: wei.liu2@citrix.com, wency@cn.fujitsu.com,
	andrew.cooper3@citrix.com, yunhong.jiang@intel.com,
	eddie.dong@intel.com, xen-devel@lists.xen.org,
	guijianfeng@cn.fujitsu.com, rshriram@cs.ubc.ca,
	ian.jackson@eu.citrix.com
Subject: Re: [PATCH v3 COLOPre 08/26] tools/libxc: support to resume uncooperative HVM guests
Date: Mon, 29 Jun 2015 17:27:40 +0100	[thread overview]
Message-ID: <1435595260.32500.382.camel@citrix.com> (raw)
In-Reply-To: <1435213552-10556-9-git-send-email-yanghy@cn.fujitsu.com>

On Thu, 2015-06-25 at 14:25 +0800, Yang Hongyang wrote:
> From: Wen Congyang <wency@cn.fujitsu.com>
> 
> 1. suspend
> a. PVHVM and PV: we use the same way to suspend the guest(send the suspend

space between "guest" and the open parenthesis please.

>    request to the guest). If the guest doesn't support evtchn, the xenstore
>    variant will be used, suspending the guest via XenBus control node.
> b. pure HVM: we call xc_domain_shutdown(..., SHUTDOWN_suspend) to suspend
>    the guest
> 
> 2. Resume:
> a. fast path
>    In this case, we don't change the guest's state.
>    PV: modify the return code to 1, and than call the domctl:
>        XEN_DOMCTL_resumedomain
>    PVHVM: same with PV
>    HVM: do nothing in modify_returncode, and than call the domctl:
>         XEN_DOMCTL_resumedomain
> b. slow
>    In this case, we have changed the guest's state.

"have" or "will"? AIUI the latter would be more accurate.

>    PV: update start info, and reset all secondary CPU states. Than call the
>    domctl: XEN_DOMCTL_resumedomain
>    PVHVM and HVM can not be resumed.

I'm confused -- isn't the purpose of this patch to make PVHM support
resume?

> For PVHVM, in my test, only call the domctl: XEN_DOMCTL_resumedomain
> can work. I am not sure if we should update start info and reset all
> secondary CPU states.
> 
> For pure HVM guest, in my test, only call the domctl:
> XEN_DOMCTL_resumedomain can work.
> 
> So we can call libxl__domain_resume(..., 1) if we don't change the guest
> state, otherwise call libxl__domain_resume(..., 0).

Hrm, so it sounds here like the correctness of this new functionality
requires the caller to have not messed with the domain's state? What
sort of changes are to the guest state are we talking about here?

Isn't that a new requirement for this call? If so then it should be
documented somewhere, specifically what sorts of changes are and are not
allowed and the types of guests which are affected.

> 
> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
> Signed-off-by: Yang Hongyang <yanghy@cn.fujitsu.com>
> ---
>  tools/libxc/xc_resume.c | 22 ++++++++++++++++++----
>  1 file changed, 18 insertions(+), 4 deletions(-)
> 
> diff --git a/tools/libxc/xc_resume.c b/tools/libxc/xc_resume.c
> index e67bebd..bd82334 100644
> --- a/tools/libxc/xc_resume.c
> +++ b/tools/libxc/xc_resume.c
> @@ -109,6 +109,23 @@ static int xc_domain_resume_cooperative(xc_interface *xch, uint32_t domid)
>      return do_domctl(xch, &domctl);
>  }
>  
> +static int xc_domain_resume_hvm(xc_interface *xch, uint32_t domid)
> +{
> +    DECLARE_DOMCTL;
> +
> +    /*
> +     * If it is PVHVM, the hypercall return code is 0, because this
> +     * is not a fast path resume, we do not modify_returncode as in
> +     * xc_domain_resume_cooperative.
> +     * (resuming it in a new domain context)
> +     *
> +     * If it is a HVM, the hypercall is a NOP.
> +     */
> +    domctl.cmd = XEN_DOMCTL_resumedomain;
> +    domctl.domain = domid;
> +    return do_domctl(xch, &domctl);

There are already several open coded instances of this
XEN_DOMCTL_resumedomain, and I think putting this particular one into a
helper is actually more confusing than just inlining this at the caller.

In particular when reading this function my first question was "how do
we know this is not a fast path resume", the answer being that the only
caller is the slow path resume case, but that's not evident from the
context (what if someone adds a second call?)

So I think at least the comment ought to go at the callsite, at which
point this function doesn't add much.

(Ideally all the open coded do_domctl would go into a single
do_domainresume or something, but I don't think you need to do that
unless you really want to).

  reply	other threads:[~2015-06-29 16:27 UTC|newest]

Thread overview: 103+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-25  6:25 [PATCH v3 COLOPre 00/26] Prerequisite patches for COLO Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 01/26] tools/libxl: rename libxl__domain_suspend to libxl__domain_save Yang Hongyang
2015-06-29 15:43   ` Ian Campbell
2015-06-30  9:32     ` Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 02/26] tools/libxl: move domain suspend code into libxl_dom_suspend.c Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 03/26] tools/libxl: move domain resume " Yang Hongyang
2015-06-29 15:44   ` Ian Campbell
2015-06-25  6:25 ` [PATCH v3 COLOPre 04/26] tools/libxl: move remus code into libxl_remus.c Yang Hongyang
2015-06-29 15:48   ` Ian Campbell
2015-06-30  9:36     ` Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 05/26] tools/libxl: move save/restore code into libxl_dom_save.c Yang Hongyang
2015-06-29 15:49   ` Ian Campbell
2015-06-25  6:25 ` [PATCH v3 COLOPre 06/26] libxl/save: Refactor libxl__domain_suspend_state Yang Hongyang
2015-06-29 16:01   ` Ian Campbell
2015-06-30  9:43     ` Yang Hongyang
2015-06-30  9:50       ` Ian Campbell
2015-06-30 10:05         ` Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 07/26] libxc/restore: fix error handle of process_record Yang Hongyang
2015-06-29 16:07   ` Ian Campbell
2015-06-30  9:45     ` Yang Hongyang
2015-07-03  3:12       ` Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 08/26] tools/libxc: support to resume uncooperative HVM guests Yang Hongyang
2015-06-29 16:27   ` Ian Campbell [this message]
2015-06-30 10:08     ` Wen Congyang
2015-06-30 10:59       ` Ian Campbell
2015-06-25  6:25 ` [PATCH v3 COLOPre 09/26] tools/libxl: introduce enum type libxl_checkpointed_stream Yang Hongyang
2015-06-29 16:30   ` Ian Campbell
2015-06-30  9:53     ` Yang Hongyang
2015-06-30 10:52       ` Ian Campbell
2015-07-01  2:05         ` Yang Hongyang
2015-07-01 10:36           ` Ian Campbell
2015-07-01 13:43             ` Yang Hongyang
2015-07-01 14:09               ` Ian Campbell
2015-06-25  6:25 ` [PATCH v3 COLOPre 10/26] migration/save: pass checkpointed_stream from libxl to libxc Yang Hongyang
2015-06-29 16:33   ` Ian Campbell
2015-06-25  6:25 ` [PATCH v3 COLOPre 11/26] tools/libxl: introduce a new API libxl__domain_restore() to load qemu state Yang Hongyang
2015-06-29 16:38   ` Ian Campbell
2015-06-30 10:04     ` Yang Hongyang
2015-06-30 10:54       ` Ian Campbell
2015-06-25  6:25 ` [PATCH v3 COLOPre 12/26] tools/libxl: Update libxl_domain_unpause() to support qemu-xen Yang Hongyang
2015-06-30 10:00   ` Ian Campbell
2015-07-01  2:10     ` Yang Hongyang
2015-07-01 10:38       ` Ian Campbell
2015-07-01 13:38         ` Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 13/26] tools/libxl: introduce libxl__domain_common_switch_qemu_logdirty() Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 14/26] tools/libxl: export logdirty_init Yang Hongyang
2015-06-30 10:01   ` Ian Campbell
2015-06-25  6:25 ` [PATCH v3 COLOPre 15/26] tools/libxl: Add back channel to allow migration target send data back Yang Hongyang
2015-06-30 10:07   ` Ian Campbell
2015-07-01  2:28     ` Yang Hongyang
2015-07-01 10:40       ` Ian Campbell
2015-07-01 13:46         ` Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 16/26] tools/libx{l, c}: add back channel to libxc Yang Hongyang
2015-06-30 10:10   ` Ian Campbell
2015-07-01  2:38     ` Yang Hongyang
2015-07-01 10:42       ` Ian Campbell
2015-07-01 11:01         ` Andrew Cooper
2015-07-01 11:21           ` Ian Campbell
2015-07-01 12:07             ` Ian Jackson
2015-07-01 13:56               ` Yang Hongyang
2015-07-01 13:58                 ` Ian Jackson
2015-07-01 14:21               ` Ian Campbell
2015-07-01 13:54           ` Yang Hongyang
2015-07-01 14:03             ` Andrew Cooper
2015-06-30 10:17   ` Ian Campbell
2015-07-01  2:40     ` Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 17/26] tools/libx{l, c}: introduce should_checkpoint callback Yang Hongyang
2015-06-30 10:19   ` Ian Campbell
2015-07-01  2:43     ` Yang Hongyang
2015-07-01 10:43       ` Ian Campbell
2015-07-01 13:58         ` Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 18/26] tools/libx{l, c}: add postcopy/suspend callback to restore side Yang Hongyang
2015-06-30 10:21   ` Ian Campbell
2015-07-01  2:48     ` Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 19/26] libxc/migration: Specification update for DIRTY_BITMAP records Yang Hongyang
2015-06-30 10:24   ` Ian Campbell
2015-07-01  3:07     ` Yang Hongyang
2015-07-01 10:16       ` Andrew Cooper
2015-07-01 10:27         ` Ian Campbell
2015-07-01 10:39           ` Andrew Cooper
2015-07-01 11:00             ` Ian Campbell
2015-07-03 14:25               ` Andrew Cooper
2015-07-03 14:41                 ` Ian Campbell
2015-06-25  6:25 ` [PATCH v3 COLOPre 20/26] libxc/migration: export read_record for common use Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 21/26] tools/libxl: refactor write stream to support back channel Yang Hongyang
2015-06-30 10:28   ` Ian Campbell
2015-07-01  5:33     ` Wen Congyang
2015-07-01 10:45       ` Ian Campbell
2015-07-01 11:09         ` Wen Congyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 22/26] tools/libxl: refactor read " Yang Hongyang
2015-06-30 10:39   ` Ian Campbell
2015-06-25  6:25 ` [PATCH v3 COLOPre 23/26] docs/libxl: Introduce COLO_CONTEXT to support migration v2 colo streams Yang Hongyang
2015-06-30 10:42   ` Ian Campbell
2015-07-01  3:10     ` Yang Hongyang
2015-07-01 10:44       ` Ian Campbell
2015-07-01 14:05         ` Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 24/26] tools/libxl: rename remus device to checkpoint device Yang Hongyang
2015-06-30 10:43   ` Ian Campbell
2015-07-01  3:11     ` Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 25/26] tools/libxl: adjust the indentation Yang Hongyang
2015-06-25  6:25 ` [PATCH v3 COLOPre 26/26] tools/libxl: don't touch remus in checkpoint_device Yang Hongyang
2015-06-30 10:50   ` Ian Campbell
2015-07-01  3:11     ` Yang Hongyang

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=1435595260.32500.382.camel@citrix.com \
    --to=ian.campbell@citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=eddie.dong@intel.com \
    --cc=guijianfeng@cn.fujitsu.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=rshriram@cs.ubc.ca \
    --cc=wei.liu2@citrix.com \
    --cc=wency@cn.fujitsu.com \
    --cc=xen-devel@lists.xen.org \
    --cc=yanghy@cn.fujitsu.com \
    --cc=yunhong.jiang@intel.com \
    /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.