mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
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@kublai.com>
This commit is contained in:
1 parent
5f7ac4f0bc
commit
e5d4e1285c
5 files changed
+42
-29
No files matched your search
@@ -178,7 +178,17 @@ static PyObject *pyxc_domain_shutdown(XcObject *self, PyObject *args)
|
||||
|
||||
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",
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
@@ -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)))
|
||||
|
||||
|
||||