[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 3/6] tools/libxl: move domain resume code into libxl_dom_suspend.c
move domain resume code into libxl_dom_suspend.c. Signed-off-by: Yang Hongyang <yanghy@xxxxxxxxxxxxxx> CC: Ian Campbell <Ian.Campbell@xxxxxxxxxx> CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> CC: Wei Liu <wei.liu2@xxxxxxxxxx> CC: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- tools/libxl/libxl.c | 59 ----------------------------- tools/libxl/libxl_dom.c | 20 ---------- tools/libxl/libxl_dom_suspend.c | 82 +++++++++++++++++++++++++++++++++++++++++ tools/libxl/libxl_internal.h | 1 + 4 files changed, 83 insertions(+), 79 deletions(-) diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 5a70062..77c6a36 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -510,39 +510,6 @@ int libxl_domain_rename(libxl_ctx *ctx, uint32_t domid, return rc; } -int libxl__domain_resume(libxl__gc *gc, uint32_t domid, int suspend_cancel) -{ - int rc = 0; - - if (xc_domain_resume(CTX->xch, domid, suspend_cancel)) { - LOGE(ERROR, "xc_domain_resume failed for domain %u", domid); - rc = ERROR_FAIL; - goto out; - } - - libxl_domain_type type = libxl__domain_type(gc, domid); - if (type == LIBXL_DOMAIN_TYPE_INVALID) { - rc = ERROR_FAIL; - goto out; - } - - if (type == LIBXL_DOMAIN_TYPE_HVM) { - rc = libxl__domain_resume_device_model(gc, domid); - if (rc) { - LOG(ERROR, "failed to resume device model for domain %u:%d", - domid, rc); - goto out; - } - } - - if (!xs_resume_domain(CTX->xsh, domid)) { - LOGE(ERROR, "xs_resume_domain failed for domain %u", domid); - rc = ERROR_FAIL; - } -out: - return rc; -} - int libxl_domain_resume(libxl_ctx *ctx, uint32_t domid, int suspend_cancel, const libxl_asyncop_how *ao_how) { @@ -5948,32 +5915,6 @@ int libxl_domain_sched_params_get(libxl_ctx *ctx, uint32_t domid, return ret; } -static int libxl__domain_s3_resume(libxl__gc *gc, int domid) -{ - int rc = 0; - - switch (libxl__domain_type(gc, domid)) { - case LIBXL_DOMAIN_TYPE_HVM: - switch (libxl__device_model_version_running(gc, domid)) { - case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL: - rc = xc_hvm_param_set(CTX->xch, domid, HVM_PARAM_ACPI_S_STATE, 0); - break; - case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN: - rc = libxl__qmp_system_wakeup(gc, domid); - break; - default: - rc = ERROR_INVAL; - break; - } - break; - default: - rc = ERROR_INVAL; - break; - } - - return rc; -} - int libxl_send_trigger(libxl_ctx *ctx, uint32_t domid, libxl_trigger trigger, uint32_t vcpuid) { diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c index 9444329..701e9f7 100644 --- a/tools/libxl/libxl_dom.c +++ b/tools/libxl/libxl_dom.c @@ -1319,26 +1319,6 @@ static void switch_logdirty_done(libxl__egc *egc, /*----- callbacks, called by xc_domain_save -----*/ -int libxl__domain_resume_device_model(libxl__gc *gc, uint32_t domid) -{ - - switch (libxl__device_model_version_running(gc, domid)) { - case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL: { - libxl__qemu_traditional_cmd(gc, domid, "continue"); - libxl__wait_for_device_model_deprecated(gc, domid, "running", NULL, NULL, NULL); - break; - } - case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN: - if (libxl__qmp_resume(gc, domid)) - return ERROR_FAIL; - break; - default: - return ERROR_INVAL; - } - - return 0; -} - static inline char *physmap_path(libxl__gc *gc, uint32_t dm_domid, uint32_t domid, char *phys_offset, char *node) diff --git a/tools/libxl/libxl_dom_suspend.c b/tools/libxl/libxl_dom_suspend.c index ef8d60b..8b9dd6c 100644 --- a/tools/libxl/libxl_dom_suspend.c +++ b/tools/libxl/libxl_dom_suspend.c @@ -372,6 +372,88 @@ static void domain_suspend_callback_common_done(libxl__egc *egc, { libxl__xc_domain_saverestore_async_callback_done(egc, &dss->shs, ok); } + +/*==================== Domain resume ====================*/ + +int libxl__domain_resume_device_model(libxl__gc *gc, uint32_t domid) +{ + + switch (libxl__device_model_version_running(gc, domid)) { + case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL: { + libxl__qemu_traditional_cmd(gc, domid, "continue"); + libxl__wait_for_device_model_deprecated(gc, domid, "running", NULL, NULL, NULL); + break; + } + case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN: + if (libxl__qmp_resume(gc, domid)) + return ERROR_FAIL; + break; + default: + return ERROR_INVAL; + } + + return 0; +} + +int libxl__domain_s3_resume(libxl__gc *gc, int domid) +{ + int rc = 0; + + switch (libxl__domain_type(gc, domid)) { + case LIBXL_DOMAIN_TYPE_HVM: + switch (libxl__device_model_version_running(gc, domid)) { + case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL: + rc = xc_hvm_param_set(CTX->xch, domid, HVM_PARAM_ACPI_S_STATE, 0); + break; + case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN: + rc = libxl__qmp_system_wakeup(gc, domid); + break; + default: + rc = ERROR_INVAL; + break; + } + break; + default: + rc = ERROR_INVAL; + break; + } + + return rc; +} + +int libxl__domain_resume(libxl__gc *gc, uint32_t domid, int suspend_cancel) +{ + int rc = 0; + + if (xc_domain_resume(CTX->xch, domid, suspend_cancel)) { + LOGE(ERROR, "xc_domain_resume failed for domain %u", domid); + rc = ERROR_FAIL; + goto out; + } + + libxl_domain_type type = libxl__domain_type(gc, domid); + if (type == LIBXL_DOMAIN_TYPE_INVALID) { + rc = ERROR_FAIL; + goto out; + } + + if (type == LIBXL_DOMAIN_TYPE_HVM) { + rc = libxl__domain_resume_device_model(gc, domid); + if (rc) { + LOG(ERROR, "failed to resume device model for domain %u:%d", + domid, rc); + goto out; + } + } + + if (!xs_resume_domain(CTX->xsh, domid)) { + LOGE(ERROR, "xs_resume_domain failed for domain %u", domid); + rc = ERROR_FAIL; + } +out: + return rc; +} + /* * Local variables: * mode: C diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 8e59b98..164c448 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -1041,6 +1041,7 @@ _hidden int libxl__userdata_store(libxl__gc *gc, uint32_t domid, _hidden int libxl__domain_resume(libxl__gc *gc, uint32_t domid, int suspend_cancel); +_hidden int libxl__domain_s3_resume(libxl__gc *gc, int domid); /* returns 0 or 1, or a libxl error code */ _hidden int libxl__domain_pvcontrol_available(libxl__gc *gc, uint32_t domid); -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |