[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Let xend choose to do hard or soft domain resumption depending on
# HG changeset patch # User kfraser@xxxxxxxxxxxxxxxxxxxxx # Date 1172655543 0 # Node ID 270a5e2ead432b689640f4281bc76c79b2e461fe # Parent 8939316a07358245e1a5d2f716f7f8ee58dabffb Let xend choose to do hard or soft domain resumption depending on whether the domain advertises support for soft resumption in its elfnotes. Signed-off-by: Brendan Cully <brendan@xxxxxxxxxx> --- tools/libxc/xc_resume.c | 8 ++------ tools/libxc/xenctrl.h | 4 +++- tools/python/xen/lowlevel/xc/xc.c | 15 +++++++++++++-- tools/python/xen/xend/XendCheckpoint.py | 17 ----------------- tools/python/xen/xend/XendDomainInfo.py | 27 ++++++++++++++++++++++++--- 5 files changed, 42 insertions(+), 29 deletions(-) diff -r 8939316a0735 -r 270a5e2ead43 tools/libxc/xc_resume.c --- a/tools/libxc/xc_resume.c Wed Feb 28 09:38:14 2007 +0000 +++ b/tools/libxc/xc_resume.c Wed Feb 28 09:39:03 2007 +0000 @@ -169,13 +169,9 @@ static int xc_domain_resume_any(int xc_h * (2) should be used only for guests which cannot handle the special * new return code. (1) is always safe (but slower). */ -int xc_domain_resume(int xc_handle, uint32_t domid) +int xc_domain_resume(int xc_handle, uint32_t domid, int fast) { - /* - * XXX: Implement a way to select between options (1) and (2). - * Or expose the options as two different methods to Python. - */ - return (0 + return (fast ? xc_domain_resume_cooperative(xc_handle, domid) : xc_domain_resume_any(xc_handle, domid)); } diff -r 8939316a0735 -r 270a5e2ead43 tools/libxc/xenctrl.h --- a/tools/libxc/xenctrl.h Wed Feb 28 09:38:14 2007 +0000 +++ b/tools/libxc/xenctrl.h Wed Feb 28 09:39:03 2007 +0000 @@ -243,10 +243,12 @@ int xc_domain_destroy(int xc_handle, * * @parm xc_handle a handle to an open hypervisor interface * @parm domid the domain id to resume + * @parm fast use cooperative resume (guest must support this) * return 0 on success, -1 on failure */ int xc_domain_resume(int xc_handle, - uint32_t domid); + uint32_t domid, + int fast); /** * This function will shutdown a domain. This is intended for use in diff -r 8939316a0735 -r 270a5e2ead43 tools/python/xen/lowlevel/xc/xc.c --- a/tools/python/xen/lowlevel/xc/xc.c Wed Feb 28 09:38:14 2007 +0000 +++ b/tools/python/xen/lowlevel/xc/xc.c Wed Feb 28 09:39:03 2007 +0000 @@ -178,7 +178,17 @@ static PyObject *pyxc_domain_shutdown(Xc static PyObject *pyxc_domain_resume(XcObject *self, PyObject *args) { - return dom_op(self, args, xc_domain_resume); + uint32_t dom; + int fast; + + if (!PyArg_ParseTuple(args, "ii", &dom, &fast)) + return NULL; + + if (xc_domain_resume(self->xc_handle, dom, fast) != 0) + return pyxc_error_to_exception(); + + Py_INCREF(zero); + return zero; } static PyObject *pyxc_vcpu_setaffinity(XcObject *self, @@ -1124,7 +1134,8 @@ static PyMethodDef pyxc_methods[] = { (PyCFunction)pyxc_domain_resume, METH_VARARGS, "\n" "Resume execution of a suspended domain.\n" - " dom [int]: Identifier of domain to be resumed.\n\n" + " dom [int]: Identifier of domain to be resumed.\n" + " fast [int]: Use cooperative resume.\n\n" "Returns: [int] 0 on success; -1 on error.\n" }, { "domain_shutdown", diff -r 8939316a0735 -r 270a5e2ead43 tools/python/xen/xend/XendCheckpoint.py --- a/tools/python/xen/xend/XendCheckpoint.py Wed Feb 28 09:38:14 2007 +0000 +++ b/tools/python/xen/xend/XendCheckpoint.py Wed Feb 28 09:39:03 2007 +0000 @@ -137,23 +137,6 @@ def save(fd, dominfo, network, live, dst log.exception("Save failed on domain %s (%s).", domain_name, dominfo.getDomid()) - dominfo._releaseDevices() - dominfo.testDeviceComplete() - dominfo.testvifsComplete() - log.debug("XendCheckpoint.save: devices released") - - dominfo._resetChannels() - - dominfo._removeDom('control/shutdown') - dominfo._removeDom('device-misc/vif/nextDeviceID') - - dominfo._createChannels() - dominfo._introduceDomain() - dominfo._storeDomDetails() - - dominfo._createDevices() - log.debug("XendCheckpoint.save: devices created") - dominfo.resumeDomain() log.debug("XendCheckpoint.save: resumeDomain") diff -r 8939316a0735 -r 270a5e2ead43 tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Wed Feb 28 09:38:14 2007 +0000 +++ b/tools/python/xen/xend/XendDomainInfo.py Wed Feb 28 09:39:03 2007 +0000 @@ -1662,10 +1662,31 @@ class XendDomainInfo: def resumeDomain(self): log.debug("XendDomainInfo.resumeDomain(%s)", str(self.domid)) + if self.domid is None: + return try: - if self.domid is not None: - xc.domain_resume(self.domid) - ResumeDomain(self.domid) + # could also fetch a parsed note from xenstore + fast = self.info.get_notes().get('SUSPEND_CANCEL') and 1 or 0 + if not fast: + self._releaseDevices() + self.testDeviceComplete() + self.testvifsComplete() + log.debug("XendDomainInfo.resumeDomain: devices released") + + self._resetChannels() + + self._removeDom('control/shutdown') + self._removeDom('device-misc/vif/nextDeviceID') + + self._createChannels() + self._introduceDomain() + self._storeDomDetails() + + self._createDevices() + log.debug("XendDomainInfo.resumeDomain: devices created") + + xc.domain_resume(self.domid, fast) + ResumeDomain(self.domid) except: log.exception("XendDomainInfo.resume: xc.domain_resume failed on domain %s." % (str(self.domid))) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |