From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vitaly Kuznetsov Subject: [PATCH RFC/WIP 3/4] libxl: add SHUTDOWN_kexec state support Date: Mon, 25 Aug 2014 15:42:25 +0200 Message-ID: <1408974146-6519-4-git-send-email-vkuznets@redhat.com> References: <1408974146-6519-1-git-send-email-vkuznets@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1XLuXj-0006rC-UF for xen-devel@lists.xenproject.org; Mon, 25 Aug 2014 13:42:44 +0000 In-Reply-To: <1408974146-6519-1-git-send-email-vkuznets@redhat.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@lists.xenproject.org Cc: Andrew Jones , David Vrabel , Jan Beulich List-Id: xen-devel@lists.xenproject.org Add kexec to domain suspend state and treat a domain as already suspended and successfully responded to suspend request if the flag is set. Signed-off-by: Vitaly Kuznetsov --- tools/libxl/libxl.c | 1 + tools/libxl/libxl.h | 1 + tools/libxl/libxl_dom.c | 6 ++++++ tools/libxl/libxl_internal.h | 1 + 4 files changed, 9 insertions(+) diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 2d29ad2..0ba3285 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -786,6 +786,7 @@ int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd, int flags, dss->type = type; dss->live = flags & LIBXL_SUSPEND_LIVE; dss->debug = flags & LIBXL_SUSPEND_DEBUG; + dss->kexec = flags & LIBXL_SUSPEND_KEXEC; libxl__domain_suspend(egc, dss); return AO_INPROGRESS; diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index 06bbca6..c8185f9 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -689,6 +689,7 @@ int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd, LIBXL_EXTERNAL_CALLERS_ONLY; #define LIBXL_SUSPEND_DEBUG 1 #define LIBXL_SUSPEND_LIVE 2 +#define LIBXL_SUSPEND_KEXEC 4 /* @param suspend_cancel [from xenctrl.h:xc_domain_resume( @param fast )] * If this parameter is true, use co-operative resume. The guest diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c index 69e6088..b2f3a09 100644 --- a/tools/libxl/libxl_dom.c +++ b/tools/libxl/libxl_dom.c @@ -1038,6 +1038,12 @@ int libxl__domain_suspend_common_callback(void *user) /* Convenience aliases */ const uint32_t domid = dss->domid; + if (dss->kexec) { + /* No suspend required if we're in SHUTDOWN_kexec */ + dss->guest_responded = 1; + goto guest_suspended; + } + if (dss->hvm) { xc_get_hvm_param(CTX->xch, domid, HVM_PARAM_CALLBACK_IRQ, &hvm_pvdrv); xc_get_hvm_param(CTX->xch, domid, HVM_PARAM_ACPI_S_STATE, &hvm_s_state); diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 9d17586..cdef241 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -2314,6 +2314,7 @@ struct libxl__domain_suspend_state { libxl_domain_type type; int live; int debug; + int kexec; const libxl_domain_remus_info *remus; /* private */ xc_evtchn *xce; /* event channel handle */ -- 1.9.3