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

[Xen-devel] [PATCH] tools/libxc: perpare xc_domain_save for upcoming changes


  • To: xen-devel@xxxxxxxxxxxxx
  • From: Olaf Hering <olaf@xxxxxxxxx>
  • Date: Mon, 18 Feb 2013 21:09:31 +0100
  • Delivery-date: Mon, 18 Feb 2013 20:10:07 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xen.org>

# HG changeset patch
# User Olaf Hering <olaf@xxxxxxxxx>
# Date 1361218116 -3600
# Node ID b096442271cf6a0d12510b4ee95d251f3dd63ea9
# Parent  6e66717b75a9f3797b43b73ea6c328a9cb44f9f1
tools/libxc: perpare xc_domain_save for upcoming changes

An upcoming patch will pass min_remaining to xc_domain_save.
Because such a will be an API change, take the opportunity to change the
API so that it will be easier to pass more options in the future.

- remove the hvm parameter, its already in flags XCFLAGS_HVM
- move flags, max_iters, max_factor and vm_generation_addr into a new
  struct xc_domain_save_props
- bump SONAME due to the incompatible change

Signed-off-by: Olaf Hering <olaf@xxxxxxxxx>

diff -r 6e66717b75a9 -r b096442271cf tools/libxc/Makefile
--- a/tools/libxc/Makefile
+++ b/tools/libxc/Makefile
@@ -1,7 +1,7 @@
 XEN_ROOT = $(CURDIR)/../..
 include $(XEN_ROOT)/tools/Rules.mk
 
-MAJOR    = 4.2
+MAJOR    = 4.3
 MINOR    = 0
 
 CTRL_SRCS-y       :=
diff -r 6e66717b75a9 -r b096442271cf tools/libxc/xc_domain_save.c
--- a/tools/libxc/xc_domain_save.c
+++ b/tools/libxc/xc_domain_save.c
@@ -793,17 +793,19 @@ static int save_tsc_info(xc_interface *x
     return 0;
 }
 
-int xc_domain_save(xc_interface *xch, int io_fd, uint32_t dom, uint32_t 
max_iters,
-                   uint32_t max_factor, uint32_t flags,
-                   struct save_callbacks* callbacks, int hvm,
-                   unsigned long vm_generationid_addr)
+int xc_domain_save(xc_interface *xch, int io_fd, uint32_t dom,
+                   struct xc_domain_save_props *props,
+                   struct save_callbacks *callbacks)
 {
     xc_dominfo_t info;
     DECLARE_DOMCTL;
 
+    uint32_t max_iters, max_factor;
+    uint32_t flags = props->flags;
     int rc = 1, frc, i, j, last_iter = 0, iter = 0;
     int live  = (flags & XCFLAGS_LIVE);
     int debug = (flags & XCFLAGS_DEBUG);
+    int hvm = (flags & XCFLAGS_HVM);
     int superpages = !!hvm;
     int race = 0, sent_last_iter, skip_this_iter = 0;
     unsigned int sent_this_iter = 0;
@@ -902,8 +904,8 @@ int xc_domain_save(xc_interface *xch, in
     memset(ctx, 0, sizeof(*ctx));
 
     /* If no explicit control parameters given, use defaults */
-    max_iters  = max_iters  ? : DEF_MAX_ITERS;
-    max_factor = max_factor ? : DEF_MAX_FACTOR;
+    max_iters  = props->max_iters  ? : DEF_MAX_ITERS;
+    max_factor = props->max_factor ? : DEF_MAX_FACTOR;
 
     if ( !get_platform_info(xch, dom,
                             &ctx->max_mfn, &ctx->hvirt_start, &ctx->pt_levels, 
&dinfo->guest_width) )
@@ -1623,7 +1625,7 @@ int xc_domain_save(xc_interface *xch, in
         } chunk = { 0, };
 
         chunk.id = XC_SAVE_ID_HVM_GENERATION_ID_ADDR;
-        chunk.data = vm_generationid_addr;
+        chunk.data = props->vm_generationid_addr;
 
         if ( (chunk.data != 0) &&
              wrexact(io_fd, &chunk, sizeof(chunk)) )
diff -r 6e66717b75a9 -r b096442271cf tools/libxc/xc_nomigrate.c
--- a/tools/libxc/xc_nomigrate.c
+++ b/tools/libxc/xc_nomigrate.c
@@ -21,10 +21,9 @@
 #include <xenctrl.h>
 #include <xenguest.h>
 
-int xc_domain_save(xc_interface *xch, int io_fd, uint32_t dom, uint32_t 
max_iters,
-                   uint32_t max_factor, uint32_t flags,
-                   struct save_callbacks* callbacks, int hvm,
-                   unsigned long vm_generationid_addr)
+int xc_domain_save(xc_interface *xch, int io_fd, uint32_t dom,
+                   struct xc_domain_save_props *props,
+                   struct save_callbacks *callbacks)
 {
     errno = ENOSYS;
     return -1;
diff -r 6e66717b75a9 -r b096442271cf tools/libxc/xenguest.h
--- a/tools/libxc/xenguest.h
+++ b/tools/libxc/xenguest.h
@@ -76,6 +76,13 @@ struct save_callbacks {
     void* data;
 };
 
+struct xc_domain_save_props {
+    uint32_t max_iters;
+    uint32_t max_factor;
+    uint32_t flags; /* XCFLAGS_xxx */
+    unsigned long vm_generationid_addr;
+};
+
 /**
  * This function will save a running domain.
  *
@@ -84,11 +91,9 @@ struct save_callbacks {
  * @parm dom the id of the domain
  * @return 0 on success, -1 on failure
  */
-int xc_domain_save(xc_interface *xch, int io_fd, uint32_t dom, uint32_t 
max_iters,
-                   uint32_t max_factor, uint32_t flags /* XCFLAGS_xxx */,
-                   struct save_callbacks* callbacks, int hvm,
-                   unsigned long vm_generationid_addr);
-
+int xc_domain_save(xc_interface *xch, int io_fd, uint32_t dom,
+                   struct xc_domain_save_props *props,
+                   struct save_callbacks *callbacks);
 
 /* callbacks provided by xc_domain_restore */
 struct restore_callbacks {
diff -r 6e66717b75a9 -r b096442271cf tools/libxl/libxl_save_helper.c
--- a/tools/libxl/libxl_save_helper.c
+++ b/tools/libxl/libxl_save_helper.c
@@ -216,17 +216,17 @@ int main(int argc, char **argv)
     assert(mode);
 
     if (!strcmp(mode,"--save-domain")) {
-
-        int io_fd =                atoi(NEXTARG);
-        uint32_t dom =             strtoul(NEXTARG,0,10);
-        uint32_t max_iters =       strtoul(NEXTARG,0,10);
-        uint32_t max_factor =      strtoul(NEXTARG,0,10);
-        uint32_t flags =           strtoul(NEXTARG,0,10);
-        int hvm =                  atoi(NEXTARG);
-        unsigned long genidad =    strtoul(NEXTARG,0,10);
-        toolstack_save_fd  =       atoi(NEXTARG);
-        toolstack_save_len =       strtoul(NEXTARG,0,10);
-        unsigned cbflags =         strtoul(NEXTARG,0,10);
+        struct xc_domain_save_props props = { };
+        unsigned cbflags;
+        int io_fd =                  atoi(NEXTARG);
+        uint32_t dom =               strtoul(NEXTARG,0,10);
+        props.max_iters =            strtoul(NEXTARG,0,10);
+        props.max_factor =           strtoul(NEXTARG,0,10);
+        props.flags =                strtoul(NEXTARG,0,10);
+        props.vm_generationid_addr = strtoul(NEXTARG,0,10);
+        toolstack_save_fd  =         atoi(NEXTARG);
+        toolstack_save_len =         strtoul(NEXTARG,0,10);
+        cbflags =                    strtoul(NEXTARG,0,10);
         assert(!*++argv);
 
         if (toolstack_save_fd >= 0)
@@ -235,8 +235,7 @@ int main(int argc, char **argv)
         helper_setcallbacks_save(&helper_save_callbacks, cbflags);
 
         startup("save");
-        r = xc_domain_save(xch, io_fd, dom, max_iters, max_factor, flags,
-                           &helper_save_callbacks, hvm, genidad);
+        r = xc_domain_save(xch, io_fd, dom, &props, &helper_save_callbacks);
         complete(r);
 
     } else if (!strcmp(mode,"--restore-domain")) {
diff -r 6e66717b75a9 -r b096442271cf 
tools/python/xen/lowlevel/checkpoint/libcheckpoint.c
--- a/tools/python/xen/lowlevel/checkpoint/libcheckpoint.c
+++ b/tools/python/xen/lowlevel/checkpoint/libcheckpoint.c
@@ -173,9 +173,8 @@ int checkpoint_start(checkpoint_state* s
                     struct save_callbacks* callbacks,
                     unsigned int remus_flags)
 {
+    struct xc_domain_save_props props = { .flags = XCFLAGS_LIVE };
     int hvm, rc;
-    int flags = XCFLAGS_LIVE;
-    unsigned long vm_generationid_addr;
 
     if (!s->domid) {
        s->errstr = "checkpoint state not opened";
@@ -192,22 +191,19 @@ int checkpoint_start(checkpoint_state* s
        sprintf(path, "/local/domain/%u/hvmloader/generation-id-address", 
s->domid);
        addr = xs_read(s->xsh, XBT_NULL, path, NULL);
 
-       vm_generationid_addr = (addr) ? strtoul(addr, NULL, 0) : 0;
+       props.vm_generationid_addr = (addr) ? strtoul(addr, NULL, 0) : 0;
        free(addr);
 
-       flags |= XCFLAGS_HVM;
+       props.flags |= XCFLAGS_HVM;
        if (switch_qemu_logdirty(s, 1))
            return -1;
-    } else {
-       vm_generationid_addr = 0;
     }
     if (remus_flags & CHECKPOINT_FLAGS_COMPRESSION)
-      flags |= XCFLAGS_CHECKPOINT_COMPRESS;
+      props.flags |= XCFLAGS_CHECKPOINT_COMPRESS;
 
     callbacks->switch_qemu_logdirty = noop_switch_logdirty;
 
-    rc = xc_domain_save(s->xch, fd, s->domid, 0, 0, flags, callbacks, hvm,
-                        vm_generationid_addr);
+    rc = xc_domain_save(s->xch, fd, s->domid, &props, callbacks);
 
     if (hvm)
        switch_qemu_logdirty(s, 0);
diff -r 6e66717b75a9 -r b096442271cf tools/xcutils/xc_save.c
--- a/tools/xcutils/xc_save.c
+++ b/tools/xcutils/xc_save.c
@@ -175,7 +175,8 @@ int
 main(int argc, char **argv)
 {
     xc_interface *xch;
-    unsigned int maxit, max_f, lflags;
+    struct xc_domain_save_props props = { };
+    unsigned int lflags;
     int io_fd, ret, port;
     struct save_callbacks callbacks;
     xentoollog_level lvl;
@@ -186,10 +187,11 @@ main(int argc, char **argv)
 
     io_fd = atoi(argv[1]);
     si.domid = atoi(argv[2]);
-    maxit = atoi(argv[3]);
-    max_f = atoi(argv[4]);
+    props.max_iters = atoi(argv[3]);
+    props.max_factor = atoi(argv[4]);
     si.flags = atoi(argv[5]);
 
+    props.flags = si.flags;
     si.suspend_evtchn = -1;
 
     lvl = si.flags & XCFLAGS_DEBUG ? XTL_DEBUG: XTL_DETAIL;
@@ -221,8 +223,7 @@ main(int argc, char **argv)
     memset(&callbacks, 0, sizeof(callbacks));
     callbacks.suspend = suspend;
     callbacks.switch_qemu_logdirty = switch_qemu_logdirty;
-    ret = xc_domain_save(si.xch, io_fd, si.domid, maxit, max_f, si.flags, 
-                         &callbacks, !!(si.flags & XCFLAGS_HVM), 0);
+    ret = xc_domain_save(si.xch, io_fd, si.domid, &props, &callbacks);
 
     if (si.suspend_evtchn > 0)
         xc_suspend_evtchn_release(si.xch, si.xce, si.domid, si.suspend_evtchn);

_______________________________________________
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®.