All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ian Campbell <ian.campbell@citrix.com>
To: Wen Congyang <wency@cn.fujitsu.com>
Cc: wei.liu2@citrix.com, eddie.dong@intel.com,
	andrew.cooper3@citrix.com, yunhong.jiang@intel.com,
	ian.jackson@eu.citrix.com, xen-devel@lists.xen.org,
	guijianfeng@cn.fujitsu.com, rshriram@cs.ubc.ca,
	Yang Hongyang <yanghy@cn.fujitsu.com>
Subject: Re: [PATCH v2 COLOPre 02/13] tools/libxc: support to resume uncooperative HVM guests
Date: Thu, 11 Jun 2015 09:44:49 +0100	[thread overview]
Message-ID: <1434012289.30003.120.camel@citrix.com> (raw)
In-Reply-To: <5578F59F.5000307@cn.fujitsu.com>

On Thu, 2015-06-11 at 10:42 +0800, Wen Congyang wrote:
> On 06/10/2015 11:18 PM, Ian Campbell wrote:
> > On Mon, 2015-06-08 at 11:43 +0800, Yang Hongyang wrote:
> >> From: Wen Congyang <wency@cn.fujitsu.com>
> >>
> >> For PVHVM, the hypercall return code is 0, and it can be resumed
> >> in a new domain context.
> >> we suspend PVHVM and resume it is like this:
> >> 1. suspend it via evtchn
> >> 2. modifty the return code to 1
> >> 3. the guest know that the suspend is cancelled, we will use fast path
> >>    to resume it.
> >>
> >> Under COLO, we will update the guest's state(modify memory, cpu's registers,
> >> device status...). In this case, we cannot use the fast path to resume it.
> >> Keep the return code 0, and use a slow path to resume the guest. We have
> >> updated the guest state, so we call it a new domain context.
> >>
> >> For HVM, the hypercall is a NOP.
> > 
> > This doesn't match my reading of domain_resume on the Xen side, which is
> > the ultimate effect of this hypercall. It seems to unpause the domain
> > (and all vcpus) regardless of the domain type, including PVHVM vs HVM
> > (which isn't something Xen is generally aware of anyway).
> > 
> > I also can't really follow the stuff about PVHVM vs HVM vs uncooperative
> > guests, and I certainly can't see where the PVHVM vs HVM distinction is
> > made in this patch.
> 
> Sorry for my mistake. I read the codes again:
> 
> 1. suspend
> a. PVHVM and PV: we use the same way to suspend the guest(send the suspend
>    request to the guest)
> b. pure HVM: we call xc_domain_shutdown(..., SHUTDOWN_suspend) to suspend
>    the guest
> c. ???: suspending the guest via XenBus control node

AFAIK c is another option under a, it depends on whether the guest
supports evtchn or not, if not then the xenstore variant will be used.

> I don't know we will goto c in which case.
> 
> 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.
>    PV: update start info, and reset all secondary CPU states. Than call the
>    domctl: XEN_DOMCTL_resumedomain
>    PVHVM and HVM can not be resumed.
> 
> 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).
> 
> Any suggestion is welcomed.
> 
> Thanks
> Wen Congyang
> 
> 
> > 
> > Ian.
> > 
> > 
> >>
> >> 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);
> >> +}
> >> +
> >>  static int xc_domain_resume_any(xc_interface *xch, uint32_t domid)
> >>  {
> >>      DECLARE_DOMCTL;
> >> @@ -138,10 +155,7 @@ static int xc_domain_resume_any(xc_interface *xch, uint32_t domid)
> >>       */
> >>  #if defined(__i386__) || defined(__x86_64__)
> >>      if ( info.hvm )
> >> -    {
> >> -        ERROR("Cannot resume uncooperative HVM guests");
> >> -        return rc;
> >> -    }
> >> +        return xc_domain_resume_hvm(xch, domid);
> >>  
> >>      if ( xc_domain_get_guest_width(xch, domid, &dinfo->guest_width) != 0 )
> >>      {
> > 
> > 
> > .
> > 
> 

  reply	other threads:[~2015-06-11  8:44 UTC|newest]

Thread overview: 106+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-08  3:43 [PATCH v2 COLOPre 00/13] Prerequisite patches for COLO Yang Hongyang
2015-06-08  3:43 ` [PATCH v2 COLOPre 01/13] libxc/restore: fix error handle of process_record Yang Hongyang
2015-06-08  9:24   ` Andrew Cooper
2015-06-08  9:37     ` Yang Hongyang
2015-06-08  9:39       ` Andrew Cooper
2015-06-10 14:55   ` Ian Campbell
2015-06-11  2:10     ` Yang Hongyang
2015-06-08  3:43 ` [PATCH v2 COLOPre 02/13] tools/libxc: support to resume uncooperative HVM guests Yang Hongyang
2015-06-10 15:18   ` Ian Campbell
2015-06-11  2:42     ` Wen Congyang
2015-06-11  8:44       ` Ian Campbell [this message]
2015-06-11  8:56         ` Wen Congyang
2015-06-11  9:41           ` Ian Campbell
2015-06-08  3:43 ` [PATCH v2 COLOPre 03/13] libxc/restore: zero ioreq page only one time Yang Hongyang
2015-06-08  9:46   ` Andrew Cooper
2015-06-08  9:49     ` Andrew Cooper
2015-06-08  9:58     ` Yang Hongyang
2015-06-08 10:15       ` Andrew Cooper
2015-06-09  0:59         ` Yang Hongyang
2015-06-09  7:30           ` Andrew Cooper
2015-06-10  5:26             ` Yang Hongyang
2015-06-10  7:44               ` Andrew Cooper
2015-06-10  9:06                 ` Wen Congyang
2015-06-10 10:08                   ` Andrew Cooper
2015-06-10 10:35                     ` Paul Durrant
2015-06-10 10:40                   ` Paul Durrant
2015-06-10 10:54                     ` Wen Congyang
2015-06-10 10:58                       ` Paul Durrant
2015-06-10 11:37                         ` Wen Congyang
2015-06-10 11:47                           ` Paul Durrant
2015-06-11  1:13                             ` Wen Congyang
2015-06-11  8:32                               ` Paul Durrant
2015-06-11  8:48                                 ` Wen Congyang
2015-06-11 10:20                                   ` Paul Durrant
2015-06-11 11:14                                     ` Wen Congyang
2015-06-11 12:54                                       ` Yang Hongyang
2015-06-12  3:39                                         ` Yang Hongyang
2015-06-11 12:58                                     ` Yang Hongyang
2015-06-11 13:25                                       ` Paul Durrant
2015-06-12  3:22                                         ` Wen Congyang
2015-06-12  7:41                                           ` Paul Durrant
2015-06-12 10:26                                             ` Wen Congyang
2015-06-12 10:54                                               ` Paul Durrant
2015-06-12 11:09                                                 ` Wen Congyang
2015-06-12 11:48                                                   ` Paul Durrant
2015-06-12 15:04                                                     ` Wen Congyang
2015-06-12 15:31                                                       ` Paul Durrant
2015-06-13  5:58                                                         ` Wen Congyang
2015-06-08  3:43 ` [PATCH v2 COLOPre 04/13] tools/libxc: export xc_bitops.h Yang Hongyang
2015-06-08 10:04   ` Yang Hongyang
2015-06-10 15:20   ` Ian Campbell
2015-06-11  2:07     ` Yang Hongyang
2015-06-11  8:41       ` Ian Campbell
2015-06-11 10:45         ` Andrew Cooper
2015-06-11 10:55           ` Ian Campbell
2015-06-15  1:50             ` Yang Hongyang
2015-06-08  3:43 ` [PATCH v2 COLOPre 05/13] tools/libxl: introduce a new API libxl__domain_restore() to load qemu state Yang Hongyang
2015-06-10 15:35   ` Ian Campbell
2015-06-11  2:09     ` Yang Hongyang
2015-06-11  8:43       ` Ian Campbell
2015-06-11  8:55         ` Yang Hongyang
2015-06-11  9:41           ` Ian Campbell
2015-06-08  3:43 ` [PATCH v2 COLOPre 06/13] tools/libxl: Introduce a new internal API libxl__domain_unpause() Yang Hongyang
2015-06-10 15:37   ` Ian Campbell
2015-06-11  2:21     ` Yang Hongyang
2015-06-11  8:43       ` Ian Campbell
2015-06-11  9:09         ` Wen Congyang
2015-06-11  9:42           ` Ian Campbell
2015-06-11  9:48             ` Wen Congyang
2015-06-12 11:23             ` Ian Jackson
2015-06-08  3:43 ` [PATCH v2 COLOPre 07/13] tools/libxl: Update libxl__domain_unpause() to support qemu-xen Yang Hongyang
2015-06-12 12:33   ` Wei Liu
2015-06-15  1:29     ` Yang Hongyang
2015-06-15 16:22       ` Wei Liu
2015-06-17  9:02         ` Yang Hongyang
2015-06-08  3:43 ` [PATCH v2 COLOPre 08/13] tools/libxl: introduce libxl__domain_common_switch_qemu_logdirty() Yang Hongyang
2015-06-16 10:45   ` Ian Campbell
2015-06-08  3:43 ` [PATCH v2 COLOPre 09/13] tools/libxl: Update libxl_save_msgs_gen.pl to support return data from xl to xc Yang Hongyang
2015-06-16 10:49   ` Ian Campbell
2015-06-16 10:54     ` Wen Congyang
2015-06-16 10:56       ` Ian Jackson
2015-06-16 11:01     ` Ian Jackson
2015-06-16 11:05   ` Ian Jackson
2015-06-16 14:19     ` Yang Hongyang
2015-06-08  3:43 ` [PATCH v2 COLOPre 10/13] tools/libxl: Add back channel to allow migration target send data back Yang Hongyang
2015-06-12 12:54   ` Wei Liu
2015-06-12 15:04     ` Ian Jackson
2015-06-15  1:38       ` Yang Hongyang
2015-06-16 10:52         ` Ian Campbell
2015-06-16 10:58           ` Ian Jackson
2015-06-15  1:33     ` Yang Hongyang
2015-06-08  3:43 ` [PATCH v2 COLOPre 11/13] tools/libxl: rename remus device to checkpoint device Yang Hongyang
2015-06-12 13:30   ` Wei Liu
2015-06-12 13:35     ` Wei Liu
2015-06-12 14:57       ` Ian Jackson
2015-06-15  1:45         ` Yang Hongyang
2015-06-15 16:24           ` Wei Liu
2015-06-16 10:53             ` Ian Campbell
2015-06-25  5:00               ` Yang Hongyang
2015-06-25  9:09                 ` Wei Liu
2015-06-25  9:16                   ` Yang Hongyang
2015-06-08  3:43 ` [PATCH v2 COLOPre 12/13] tools/libxl: adjust the indentation Yang Hongyang
2015-06-16 10:53   ` Ian Campbell
2015-06-08  3:43 ` [PATCH v2 COLOPre 13/13] tools/libxl: don't touch remus in checkpoint_device Yang Hongyang
2015-06-12 13:28   ` Wei Liu
2015-06-15  1:46     ` 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=1434012289.30003.120.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.