[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 24/27] tools/libx{c, l}: [RFC] Introduce restore_callbacks.checkpoint()





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 <andrew.cooper3@xxxxxxxxxx>
CC: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
CC: Wei Liu <wei.liu2@xxxxxxxxxx>
---
  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 <arpa/inet.h>

+#include <assert.h>
+
  #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.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.