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

[Xen-devel] [PATCH 17/20] tools/libx[cl]: Plumb static_data_done() up into libxl



libxl is going to have to provide compatibility for pre 4.14 streams which
don't contain CPUID information.  Introduce the static_data_done() callback
and plumb it up into libxl.

No overall change.

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Ian Jackson <Ian.Jackson@xxxxxxxxxx>
CC: Wei Liu <wl@xxxxxxx>
CC: Anthony PERARD <anthony.perard@xxxxxxxxxx>
---
 tools/libxc/include/xenguest.h     |  9 +++++++++
 tools/libxc/xc_sr_common_x86.c     | 13 ++++++++++++-
 tools/libxc/xc_sr_restore.c        |  1 +
 tools/libxl/libxl_create.c         | 13 +++++++++++++
 tools/libxl/libxl_save_msgs_gen.pl |  1 +
 5 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/tools/libxc/include/xenguest.h b/tools/libxc/include/xenguest.h
index d81baa6cc2..be80544bd0 100644
--- a/tools/libxc/include/xenguest.h
+++ b/tools/libxc/include/xenguest.h
@@ -140,6 +140,15 @@ int xc_domain_save(xc_interface *xch, int io_fd, uint32_t 
dom,
 
 /* callbacks provided by xc_domain_restore */
 struct restore_callbacks {
+    /*
+     * Called once the STATIC_DATA_END record has been received/inferred.
+     * Passes in the blocks of static data which have not been received, which
+     * the higher level toolstack must provide backwards compatibility for.
+     */
+#define XGR_SDD_MISSING_CPUID (1 << 0)
+#define XGR_SDD_MISSING_MSR   (1 << 1)
+    int (*static_data_done)(unsigned int missing, void *data);
+
     /* Called after a new checkpoint to suspend the guest. */
     int (*suspend)(void *data);
 
diff --git a/tools/libxc/xc_sr_common_x86.c b/tools/libxc/xc_sr_common_x86.c
index 09fb1d93d6..c3d1d30d91 100644
--- a/tools/libxc/xc_sr_common_x86.c
+++ b/tools/libxc/xc_sr_common_x86.c
@@ -44,9 +44,20 @@ int handle_x86_tsc_info(struct xc_sr_context *ctx, struct 
xc_sr_record *rec)
 
 int x86_static_data_complete(struct xc_sr_context *ctx)
 {
+    xc_interface *xch = ctx->xch;
+    unsigned int missing = 0;
+    int rc;
+
     /* TODO - something useful. */
+    missing = XGR_SDD_MISSING_MSR | XGR_SDD_MISSING_CPUID;
 
-    return 0;
+    rc = ctx->restore.callbacks->static_data_done(
+        missing, ctx->restore.callbacks->data);
+
+    if ( rc )
+        ERROR("static_data_done() callback failed: %d\n", rc);
+
+    return rc;
 }
 
 int write_x86_cpu_policy_records(struct xc_sr_context *ctx)
diff --git a/tools/libxc/xc_sr_restore.c b/tools/libxc/xc_sr_restore.c
index d4bd60a31e..09d8a08316 100644
--- a/tools/libxc/xc_sr_restore.c
+++ b/tools/libxc/xc_sr_restore.c
@@ -908,6 +908,7 @@ int xc_domain_restore(xc_interface *xch, int io_fd, 
uint32_t dom,
         assert(callbacks->checkpoint);
         /* Fallthrough */
     case XC_STREAM_PLAIN:
+        assert(callbacks->static_data_done);
         break;
 
     default:
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index 32d45dcef0..fdc76917dc 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -1227,6 +1227,7 @@ static void domcreate_bootloader_done(libxl__egc *egc,
     dcs->srs.dcs = dcs;
 
     /* Restore */
+    callbacks->static_data_done = libxl__srm_callout_callback_static_data_done;
     callbacks->restore_results = libxl__srm_callout_callback_restore_results;
 
     /* COLO only supports HVM now because it does not work very
@@ -1296,6 +1297,18 @@ static void libxl__colo_restore_setup_done(libxl__egc 
*egc,
     libxl__stream_read_start(egc, &dcs->srs);
 }
 
+int libxl__srm_callout_callback_static_data_done(unsigned int missing,
+                                                 void *user)
+{
+    libxl__save_helper_state *shs = user;
+    libxl__domain_create_state *dcs = shs->caller_state;
+    STATE_AO_GC(dcs->ao);
+
+    /* TODO - something useful. */
+
+    return 0;
+}
+
 void libxl__srm_callout_callback_restore_results(xen_pfn_t store_mfn,
           xen_pfn_t console_mfn, void *user)
 {
diff --git a/tools/libxl/libxl_save_msgs_gen.pl 
b/tools/libxl/libxl_save_msgs_gen.pl
index 831a15e0bb..5bfbd4fd10 100755
--- a/tools/libxl/libxl_save_msgs_gen.pl
+++ b/tools/libxl/libxl_save_msgs_gen.pl
@@ -29,6 +29,7 @@ our @msgs = (
     [ 'srcxA',  "wait_checkpoint", [] ],
     [ 'scxA',   "switch_qemu_logdirty",  [qw(uint32_t domid
                                           unsigned enable)] ],
+    [ 'rcxW',   "static_data_done",      [qw(unsigned missing)] ],
     [ 'rcx',    "restore_results",       ['xen_pfn_t', 'store_gfn',
                                           'xen_pfn_t', 'console_gfn'] ],
     [ 'srW',    "complete",              [qw(int retval
-- 
2.11.0


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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