[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v7 32/32] libxl: add support for migrating HVM guests without a device model
El 02/10/15 a les 20.56, Andrew Cooper ha escrit: > On 02/10/15 16:49, Roger Pau Monne wrote: >> Only some minor libxl changes are needed in order to be able to migrate HVM >> guests without a device model, no hypervisor changes are needed. >> >> This change prevents sending the emulator context if the device model >> version is set to none. >> >> Signed-off-by: Roger Pau Monnà <roger.pau@xxxxxxxxxx> >> Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> >> Cc: Ian Campbell <ian.campbell@xxxxxxxxxx> >> Cc: Wei Liu <wei.liu2@xxxxxxxxxx> >> --- >> tools/libxl/libxl_dom.c | 3 +++ >> tools/libxl/libxl_dom_suspend.c | 2 ++ >> tools/libxl/libxl_stream_write.c | 8 +++++++- >> 3 files changed, 12 insertions(+), 1 deletion(-) >> >> diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c >> index 7e8ae14..b40d744 100644 >> --- a/tools/libxl/libxl_dom.c >> +++ b/tools/libxl/libxl_dom.c >> @@ -1310,6 +1310,9 @@ void libxl__domain_suspend_common_switch_qemu_logdirty >> case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN: >> domain_suspend_switch_qemu_xen_logdirty(domid, enable, shs); >> break; >> + case LIBXL_DEVICE_MODEL_VERSION_NONE: >> + libxl__xc_domain_saverestore_async_callback_done(egc, shs, 0); >> + break; >> default: >> LOG(ERROR,"logdirty switch failed" >> ", no valid device model version found, abandoning suspend"); >> diff --git a/tools/libxl/libxl_dom_suspend.c >> b/tools/libxl/libxl_dom_suspend.c >> index 4cc01ad..3313ad1 100644 >> --- a/tools/libxl/libxl_dom_suspend.c >> +++ b/tools/libxl/libxl_dom_suspend.c >> @@ -43,6 +43,8 @@ int libxl__domain_suspend_device_model(libxl__gc *gc, >> if (ret) >> unlink(filename); >> break; >> + case LIBXL_DEVICE_MODEL_VERSION_NONE: >> + break; >> default: >> return ERROR_INVAL; >> } >> diff --git a/tools/libxl/libxl_stream_write.c >> b/tools/libxl/libxl_stream_write.c >> index 52a60d7..5551560 100644 >> --- a/tools/libxl/libxl_stream_write.c >> +++ b/tools/libxl/libxl_stream_write.c >> @@ -232,6 +232,9 @@ void libxl__stream_write_start(libxl__egc *egc, >> stream->emu_sub_hdr.id = EMULATOR_QEMU_UPSTREAM; >> break; >> >> + case LIBXL_DEVICE_MODEL_VERSION_NONE: >> + break; >> + >> default: >> rc = ERROR_FAIL; >> LOG(ERROR, "Unknown emulator for HVM domain"); >> @@ -387,8 +390,11 @@ static void emulator_xenstore_record_done(libxl__egc >> *egc, >> libxl__stream_write_state *stream) >> { >> libxl__domain_suspend_state *dss = stream->dss; >> + STATE_AO_GC(stream->ao); >> >> - if (dss->type == LIBXL_DOMAIN_TYPE_HVM) >> + if (dss->type == LIBXL_DOMAIN_TYPE_HVM && >> + libxl__device_model_version_running(gc, dss->domid) != >> + LIBXL_DEVICE_MODEL_VERSION_NONE) >> write_emulator_context_record(egc, stream); >> else { >> if (stream->in_checkpoint) > > I think a few more changes are needed to make this robust. > > write_emulator_xenstore_record() needs an early check for > LIBXL_DEVICE_MODEL_VERSION_NONE and omit the call to > libxl__save_emulator_xenstore_data() (which is only needed because > qemu-upstream has a layering violation in its save format) > > Instead of patching emulator_xenstore_record_done(), in the hunk above, > I would suggest having another early check and continue in > write_emulator_context_record() I've done so and bailed early on both functions, without touching emulator_xenstore_record_done. > Also, you need to patch the EMULATOR_* cases in > libxl_stream_read.c:process_record() to bail with a hard error if > records received for a domain configured to have no emulators. Ack, I've added checks in both REC_TYPE_EMULATOR_XENSTORE_DATA and REC_TYPE_EMULATOR_CONTEXT. Will send a new version. Thanks, Roger. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |