[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 5/5] libxl: spawns two QEMUs for HVM guests
Starts a second QEMU to provide PV backends in userspace to HVM guests. Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> --- tools/libxl/libxl_create.c | 18 ++++++++++++++++++ tools/libxl/libxl_dm.c | 9 ++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index a74b340..925738f 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -981,6 +981,15 @@ static void domcreate_console_available(libxl__egc *egc, dcs->aop_console_how.for_event)); } +static void qdisk_spawn_outcome(libxl__egc *egc, libxl__dm_spawn_state *dmss, + int rc) +{ + STATE_AO_GC(dmss->spawn.ao); + + LOG(DEBUG, "qdisk backend spawn for domain %u %s", dmss->guest_domid, + rc ? "failed" : "succeed"); +} + static void domcreate_bootloader_done(libxl__egc *egc, libxl__bootloader_state *bl, int rc) @@ -1016,6 +1025,15 @@ static void domcreate_bootloader_done(libxl__egc *egc, dcs->dmss.dm.callback = domcreate_devmodel_started; dcs->dmss.callback = domcreate_devmodel_started; + if (info->type == LIBXL_DOMAIN_TYPE_HVM) { + libxl__dm_spawn_state *dmss2; + GCNEW(dmss2); + dmss2->guest_domid = domid; + dmss2->spawn.ao = ao; + dmss2->callback = qdisk_spawn_outcome; + libxl__spawn_qdisk_backend(egc, dmss2); + } + if ( restore_fd < 0 ) { rc = libxl__domain_build(gc, d_config, domid, state); domcreate_rebuild_done(egc, dcs, rc); diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c index 29ef8ae..08087ea 100644 --- a/tools/libxl/libxl_dm.c +++ b/tools/libxl/libxl_dm.c @@ -1835,13 +1835,20 @@ out: int libxl__destroy_device_model(libxl__gc *gc, uint32_t domid) { + int rc; char *path = libxl__device_model_xs_path(gc, false, LIBXL_TOOLSTACK_DOMID, domid, ""); if (!xs_rm(CTX->xsh, XBT_NULL, path)) LOG(ERROR, "xs_rm failed for %s", path); + + kill_device_model(gc, + GCSPRINTF("libxl/%u/qdisk-backend-pid", domid)); + /* We should try to destroy the device model anyway. */ - return kill_device_model(gc, + rc = kill_device_model(gc, GCSPRINTF("/local/domain/%d/image/device-model-pid", domid)); + + return rc; } int libxl__need_xenpv_qemu(libxl__gc *gc, -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |