|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |