|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 3/3] libxl: Introduce migrate with the new QEMU.
Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
---
tools/libxl/libxl_dm.c | 6 ++++--
tools/libxl/libxl_dom.c | 28 +++++++++++++++++++++++++---
2 files changed, 29 insertions(+), 5 deletions(-)
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index bf38877..d1e023b 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -408,8 +408,10 @@ static char **
libxl__build_device_model_args_new(libxl__gc *gc,
}
}
if (info->saved_state) {
- flexarray_append(dm_args, "-loadvm");
- flexarray_append(dm_args, info->saved_state);
+ /* This file descriptor is meant to be used by QEMU */
+ int migration_fd = open(info->saved_state, O_RDONLY);
+ flexarray_append(dm_args, "-incoming");
+ flexarray_append(dm_args, libxl__sprintf(gc, "fd:%d", migration_fd));
}
for (i = 0; info->extra && info->extra[i] != NULL; i++)
flexarray_append(dm_args, info->extra[i]);
diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
index 718281a..3cef616 100644
--- a/tools/libxl/libxl_dom.c
+++ b/tools/libxl/libxl_dom.c
@@ -595,9 +595,31 @@ int libxl__domain_save_device_model(libxl__gc *gc,
uint32_t domid, int fd)
struct stat st;
uint32_t qemu_state_len;
- LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "Saving device model state to %s",
filename);
- libxl__xs_write(gc, XBT_NULL, libxl__sprintf(gc,
"/local/domain/0/device-model/%d/command", domid), "save");
- libxl__wait_for_device_model(gc, domid, "paused", NULL, NULL, NULL);
+ switch (libxl__device_model_version_running(gc, domid)) {
+ case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL: {
+ char *path = NULL;
+ LIBXL__LOG(ctx, LIBXL__LOG_DEBUG,
+ "Saving device model state to %s", filename);
+ path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/command",
+ domid);
+ libxl__xs_write(gc, XBT_NULL, path, "save");
+ libxl__wait_for_device_model(gc, domid, "paused", NULL, NULL, NULL);
+ break;
+ }
+ case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
+ fd2 = open(filename, O_WRONLY | O_CREAT | O_TRUNC);
+ if (fd2 < 0) {
+ LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR,
+ "Unable to create a QEMU save file\n");
+ return ERROR_FAIL;
+ }
+ /* Save DM state into fd2 */
+ if (libxl__qmp_migrate(gc, domid, fd2))
+ return ERROR_FAIL;
+ break;
+ default:
+ return ERROR_INVAL;
+ }
if (stat(filename, &st) < 0)
{
--
Anthony PERARD
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |