From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yang Hongyang Subject: Re: [PATCH 24/27] tools/libx{c, l}: [RFC] Introduce restore_callbacks.checkpoint() Date: Wed, 17 Jun 2015 16:20:39 +0800 Message-ID: <55812DD7.6020302@cn.fujitsu.com> References: <1434375880-30914-1-git-send-email-andrew.cooper3@citrix.com> <1434375880-30914-25-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1434375880-30914-25-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Andrew Cooper , Xen-devel Cc: Wei Liu , Ian Jackson , Ian Campbell List-Id: xen-devel@lists.xenproject.org On 06/15/2015 09:44 PM, Andrew Cooper wrote: > And call it when a checkpoint record is found in the libxc stream. > > Signed-off-by: Andrew Cooper > CC: Ian Campbell > CC: Ian Jackson > CC: Wei Liu > --- > tools/libxc/include/xenguest.h | 3 +++ > tools/libxc/xc_sr_restore.c | 15 ++++++++++++++- > tools/libxl/libxl_save_msgs_gen.pl | 2 +- > 3 files changed, 18 insertions(+), 2 deletions(-) > > diff --git a/tools/libxc/include/xenguest.h b/tools/libxc/include/xenguest.h > index 7581263..b0d27ed 100644 > --- a/tools/libxc/include/xenguest.h > +++ b/tools/libxc/include/xenguest.h > @@ -102,6 +102,9 @@ struct restore_callbacks { > int (*toolstack_restore)(uint32_t domid, const uint8_t *buf, > uint32_t size, void* data); > > + /* A checkpoint record has been found in the stream */ > + int (*checkpoint)(void* data); > + > /* to be provided as the last argument to each callback function */ > void* data; > }; > diff --git a/tools/libxc/xc_sr_restore.c b/tools/libxc/xc_sr_restore.c > index 9e27dba..5e0f817 100644 > --- a/tools/libxc/xc_sr_restore.c > +++ b/tools/libxc/xc_sr_restore.c > @@ -1,5 +1,7 @@ > #include > > +#include > + > #include "xc_sr_common.h" > > /* > @@ -472,7 +474,7 @@ static int handle_page_data(struct xc_sr_context *ctx, struct xc_sr_record *rec) > static int handle_checkpoint(struct xc_sr_context *ctx) > { > xc_interface *xch = ctx->xch; > - int rc = 0; > + int rc = 0, ret; > unsigned i; > > if ( !ctx->restore.checkpointed ) > @@ -482,6 +484,13 @@ static int handle_checkpoint(struct xc_sr_context *ctx) > goto err; > } > > + ret = ctx->restore.callbacks->checkpoint(ctx->restore.callbacks->data); > + if ( ret ) > + { > + rc = -1; > + goto err; > + } > + > if ( ctx->restore.buffer_all_records ) > { > IPRINTF("All records buffered"); > @@ -735,6 +744,10 @@ int xc_domain_restore2(xc_interface *xch, int io_fd, uint32_t dom, > ctx.restore.checkpointed = checkpointed_stream; > ctx.restore.callbacks = callbacks; > > + /* Sanity checks for callbacks. */ > + if (checkpointed_stream) coding style > + assert(callbacks->checkpoint); > + > IPRINTF("In experimental %s", __func__); > DPRINTF("fd %d, dom %u, hvm %u, pae %u, superpages %d" > ", checkpointed_stream %d", io_fd, dom, hvm, pae, > diff --git a/tools/libxl/libxl_save_msgs_gen.pl b/tools/libxl/libxl_save_msgs_gen.pl > index 6b4b65e..36b279e 100755 > --- a/tools/libxl/libxl_save_msgs_gen.pl > +++ b/tools/libxl/libxl_save_msgs_gen.pl > @@ -25,7 +25,7 @@ our @msgs = ( > 'unsigned long', 'total'] ], > [ 3, 'scxA', "suspend", [] ], > [ 4, 'scxA', "postcopy", [] ], > - [ 5, 'scxA', "checkpoint", [] ], > + [ 5, 'srcxA', "checkpoint", [] ], > [ 6, 'scxA', "switch_qemu_logdirty", [qw(int domid > unsigned enable)] ], > # toolstack_save done entirely `by hand' > -- Thanks, Yang.