From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wen Congyang Subject: [RFC Patch v3 5/8] Update libxl__domain_unpause() to support qemu-xen Date: Fri, 5 Sep 2014 17:20:16 +0800 Message-ID: <1409908819-18927-6-git-send-email-wency@cn.fujitsu.com> References: <1409908819-18927-1-git-send-email-wency@cn.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1409908819-18927-1-git-send-email-wency@cn.fujitsu.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen devel Cc: Ian Campbell , Wen Congyang , Ian Jackson , Jiang Yunhong , Dong Eddie , Yang Hongyang , Lai Jiangshan List-Id: xen-devel@lists.xenproject.org Currently, libxl__domain_unpause() only supports qemu-xen-traditional. Update it to support qemu-xen. Signed-off-by: Wen Congyang --- tools/libxl/libxl.c | 13 +++++-------- tools/libxl/libxl_dom.c | 25 +++++++++++++++++++++++++ tools/libxl/libxl_internal.h | 2 ++ 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index e570103..1de1b92 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -978,8 +978,6 @@ out: int libxl__domain_unpause(libxl__gc *gc, uint32_t domid) { - char *path; - char *state; int ret, rc = 0; libxl_domain_type type = libxl__domain_type(gc, domid); @@ -989,12 +987,11 @@ int libxl__domain_unpause(libxl__gc *gc, uint32_t domid) } if (type == LIBXL_DOMAIN_TYPE_HVM) { - path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/state", domid); - state = libxl__xs_read(gc, XBT_NULL, path); - if (state != NULL && !strcmp(state, "paused")) { - libxl__qemu_traditional_cmd(gc, domid, "continue"); - libxl__wait_for_device_model_deprecated(gc, domid, "running", - NULL, NULL, NULL); + rc = libxl__domain_unpause_device_model(gc, domid); + if (rc < 0) { + LOG(ERROR, "failed to unpause device model for domain %u:%d", + domid, rc); + goto out; } } diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c index cf56343..caa6b1d 100644 --- a/tools/libxl/libxl_dom.c +++ b/tools/libxl/libxl_dom.c @@ -2008,6 +2008,31 @@ static void remus_teardown_done(libxl__egc *egc, dss->callback(egc, dss, rc); } +int libxl__domain_unpause_device_model(libxl__gc *gc, uint32_t domid) +{ + char *path; + char *state; + + switch (libxl__device_model_version_running(gc, domid)) { + case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL: + path = libxl__sprintf(gc, "/local/domain/0/device-model/%d/state", domid); + state = libxl__xs_read(gc, XBT_NULL, path); + if (state != NULL && !strcmp(state, "paused")) { + libxl__qemu_traditional_cmd(gc, domid, "continue"); + libxl__wait_for_device_model_deprecated(gc, domid, "running", + NULL, NULL, NULL); + } + case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN: + if (libxl__qmp_resume(gc, domid)) + return ERROR_FAIL; + break; + default: + return ERROR_FAIL; + } + + return 0; +} + /*==================== Miscellaneous ====================*/ char *libxl__uuid2string(libxl__gc *gc, const libxl_uuid uuid) diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 337ffb5..313ad1c 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -993,6 +993,8 @@ _hidden int libxl__toolstack_restore(uint32_t domid, const uint8_t *buf, _hidden int libxl__domain_resume_device_model(libxl__gc *gc, uint32_t domid, int read_savefile); +_hidden int libxl__domain_unpause_device_model(libxl__gc *gc, + uint32_t domid); _hidden void libxl__userdata_destroyall(libxl__gc *gc, uint32_t domid); -- 1.9.3