From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel List <xen-devel@lists.xen.org>
Cc: Ian Jackson <Ian.Jackson@eu.citrix.com>,
Ian Campbell <Ian.Campbell@citrix.com>
Subject: Re: [Patch v2] tools/migrate: Fix regression when migrating from older version of Xen
Date: Thu, 18 Jul 2013 14:01:29 +0100 [thread overview]
Message-ID: <51E7E729.7010108@citrix.com> (raw)
In-Reply-To: <1373971931-7211-1-git-send-email-andrew.cooper3@citrix.com>
On 16/07/13 11:52, Andrew Cooper wrote:
> Commit 00a4b65f8534c9e6521eab2e6ce796ae36037774 Sep 7 2010
> "libxc: provide notification of final checkpoint to restore end"
> broke migration from any version of Xen using tools from prior to that commit
>
> Older tools have no idea about an XC_SAVE_ID_LAST_CHECKPOINT, causing newer
> tools xc_domain_restore() to start reading the qemu save record, as
> ctx->last_checkpoint is 0.
>
> The failure looks like:
> xc: error: Max batch size exceeded (1970103633). Giving up.
> where 1970103633 = 0x756d6551 = *(uint32_t*)"Qemu"
>
> Sadly, the simple fix of just setting ctx->last_checkpoint = 1 will cause an
> opposite function regresson for anyone using the current behaviour of
> save_callbacks->checkpoint().
>
> The only safe fix is to rely on the toolstack to provide this information.
>
> Passing 0 results in unchanged behaviour, while passing nonzero means "the
> other end of the migration stream does not know about
> XC_SAVE_ID_LAST_CHECKPOINT but is performing a normal migrate"
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Apologies - missed the CC's when sending.
Ping?
>
> ---
> Changes since v1:
> * Rename "last_checkpoint_unaware" to "checkpointed_stream" to be more
> generic yet still accurate as to the meaning and fix for the issue
> ---
> tools/libxc/xc_domain_restore.c | 3 ++-
> tools/libxc/xc_nomigrate.c | 2 +-
> tools/libxc/xenguest.h | 3 ++-
> tools/libxl/libxl_save_helper.c | 2 +-
> tools/xcutils/xc_restore.c | 2 +-
> 5 files changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/tools/libxc/xc_domain_restore.c b/tools/libxc/xc_domain_restore.c
> index 63d36cd..e50b185 100644
> --- a/tools/libxc/xc_domain_restore.c
> +++ b/tools/libxc/xc_domain_restore.c
> @@ -1401,7 +1401,7 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
> domid_t store_domid, unsigned int console_evtchn,
> unsigned long *console_mfn, domid_t console_domid,
> unsigned int hvm, unsigned int pae, int superpages,
> - int no_incr_generationid,
> + int no_incr_generationid, int checkpointed_stream,
> unsigned long *vm_generationid_addr,
> struct restore_callbacks *callbacks)
> {
> @@ -1472,6 +1472,7 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
>
> ctx->superpages = superpages;
> ctx->hvm = hvm;
> + ctx->last_checkpoint = !!checkpointed_stream;
>
> ctxt = xc_hypercall_buffer_alloc(xch, ctxt, sizeof(*ctxt));
>
> diff --git a/tools/libxc/xc_nomigrate.c b/tools/libxc/xc_nomigrate.c
> index 73e7566..fb6d53e 100644
> --- a/tools/libxc/xc_nomigrate.c
> +++ b/tools/libxc/xc_nomigrate.c
> @@ -35,7 +35,7 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
> domid_t store_domid, unsigned int console_evtchn,
> unsigned long *console_mfn, domid_t console_domid,
> unsigned int hvm, unsigned int pae, int superpages,
> - int no_incr_generationid,
> + int no_incr_generationid, int checkpointed_stream,
> unsigned long *vm_generationid_addr,
> struct restore_callbacks *callbacks)
> {
> diff --git a/tools/libxc/xenguest.h b/tools/libxc/xenguest.h
> index 4714bd2..2101810 100644
> --- a/tools/libxc/xenguest.h
> +++ b/tools/libxc/xenguest.h
> @@ -114,6 +114,7 @@ struct restore_callbacks {
> * @parm pae non-zero if this HVM domain has PAE support enabled
> * @parm superpages non-zero to allocate guest memory with superpages
> * @parm no_incr_generationid non-zero if generation id is NOT to be incremented
> + * @parm checkpointed_stream non-zero if the far end of the stream is using checkpointing
> * @parm vm_generationid_addr returned with the address of the generation id buffer
> * @parm callbacks non-NULL to receive a callback to restore toolstack
> * specific data
> @@ -124,7 +125,7 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
> domid_t store_domid, unsigned int console_evtchn,
> unsigned long *console_mfn, domid_t console_domid,
> unsigned int hvm, unsigned int pae, int superpages,
> - int no_incr_generationid,
> + int no_incr_generationid, int checkpointed_stream,
> unsigned long *vm_generationid_addr,
> struct restore_callbacks *callbacks);
> /**
> diff --git a/tools/libxl/libxl_save_helper.c b/tools/libxl/libxl_save_helper.c
> index 772251a..8f14b8b 100644
> --- a/tools/libxl/libxl_save_helper.c
> +++ b/tools/libxl/libxl_save_helper.c
> @@ -264,7 +264,7 @@ int main(int argc, char **argv)
> r = xc_domain_restore(xch, io_fd, dom, store_evtchn, &store_mfn,
> store_domid, console_evtchn, &console_mfn,
> console_domid, hvm, pae, superpages,
> - no_incr_genidad, &genidad,
> + no_incr_genidad, 0, &genidad,
> &helper_restore_callbacks);
> helper_stub_restore_results(store_mfn,console_mfn,genidad,0);
> complete(r);
> diff --git a/tools/xcutils/xc_restore.c b/tools/xcutils/xc_restore.c
> index 35d725c..e657c7f 100644
> --- a/tools/xcutils/xc_restore.c
> +++ b/tools/xcutils/xc_restore.c
> @@ -52,7 +52,7 @@ main(int argc, char **argv)
>
> ret = xc_domain_restore(xch, io_fd, domid, store_evtchn, &store_mfn, 0,
> console_evtchn, &console_mfn, 0, hvm, pae, superpages,
> - 0, NULL, NULL);
> + 0, 0, NULL, NULL);
>
> if ( ret == 0 )
> {
next prev parent reply other threads:[~2013-07-18 13:01 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-16 10:52 [Patch v2] tools/migrate: Fix regression when migrating from older version of Xen Andrew Cooper
2013-07-18 13:01 ` Andrew Cooper [this message]
2013-07-18 13:14 ` Ian Campbell
2013-07-18 16:20 ` Shriram Rajagopalan
2013-07-18 16:27 ` Andrew Cooper
2013-07-18 18:47 ` Shriram Rajagopalan
2013-07-22 17:52 ` Andrew Cooper
2013-07-22 17:59 ` Ian Campbell
2013-07-22 18:06 ` Andrew Cooper
2013-07-19 9:36 ` Ian Campbell
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=51E7E729.7010108@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=Ian.Campbell@citrix.com \
--cc=Ian.Jackson@eu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).