# HG changeset patch
# User Brendan Cully <brendan@xxxxxxxxx>
# Date 1168891235 28800
# Node ID fa960afcb0ac1f4938f173b9a2cd97d1f6d5775e
# Parent fb46005e07564bd152621c2ebf2c737b4115dc83
Add resumedomain domctl to resume a domain after checkpoint.
Export resumedomain domctl to libxc, xend.
Signed-off-by: Brendan Cully <brendan@xxxxxxxxx>
diff -r fb46005e0756 -r fa960afcb0ac tools/libxc/xc_domain.c
--- a/tools/libxc/xc_domain.c Mon Jan 15 12:25:04 2007 +0000
+++ b/tools/libxc/xc_domain.c Mon Jan 15 12:00:35 2007 -0800
@@ -86,6 +86,16 @@ int xc_domain_shutdown(int xc_handle,
out1:
return ret;
+}
+
+
+int xc_domain_resume(int xc_handle,
+ uint32_t domid)
+{
+ DECLARE_DOMCTL;
+ domctl.cmd = XEN_DOMCTL_resumedomain;
+ domctl.domain = (domid_t)domid;
+ return do_domctl(xc_handle, &domctl);
}
diff -r fb46005e0756 -r fa960afcb0ac tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h Mon Jan 15 12:25:04 2007 +0000
+++ b/tools/libxc/xenctrl.h Mon Jan 15 12:00:35 2007 -0800
@@ -236,6 +236,18 @@ int xc_domain_destroy(int xc_handle,
int xc_domain_destroy(int xc_handle,
uint32_t domid);
+
+/**
+ * This function resumes a suspended domain. The domain should have
+ * been previously suspended.
+ *
+ * @parm xc_handle a handle to an open hypervisor interface
+ * @parm domid the domain id to resume
+ * return 0 on success, -1 on failure
+ */
+int xc_domain_resume(int xc_handle,
+ uint32_t domid);
+
/**
* This function will shutdown a domain. This is intended for use in
* fully-virtualized domains where this operation is analogous to the
diff -r fb46005e0756 -r fa960afcb0ac tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c Mon Jan 15 12:25:04 2007 +0000
+++ b/tools/python/xen/lowlevel/xc/xc.c Mon Jan 15 12:00:35 2007 -0800
@@ -160,6 +160,10 @@ static PyObject *pyxc_domain_destroy(XcO
return dom_op(self, args, xc_domain_destroy);
}
+static PyObject *pyxc_domain_resume(XcObject *self, PyObject *args)
+{
+ return dom_op(self, args, xc_domain_resume);
+}
static PyObject *pyxc_vcpu_setaffinity(XcObject *self,
PyObject *args,
@@ -1027,6 +1031,13 @@ static PyMethodDef pyxc_methods[] = {
METH_VARARGS, "\n"
"Destroy a domain.\n"
" dom [int]: Identifier of domain to be destroyed.\n\n"
+ "Returns: [int] 0 on success; -1 on error.\n" },
+
+ { "domain_resume",
+ (PyCFunction)pyxc_domain_resume,
+ METH_VARARGS, "\n"
+ "Resume execution of a suspended domain.\n"
+ " dom [int]: Identifier of domain to be resumed.\n\n"
"Returns: [int] 0 on success; -1 on error.\n" },
{ "vcpu_setaffinity",
diff -r fb46005e0756 -r fa960afcb0ac tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py Mon Jan 15 12:25:04 2007 +0000
+++ b/tools/python/xen/xend/XendDomainInfo.py Mon Jan 15 12:00:35 2007 -0800
@@ -1533,6 +1533,15 @@ class XendDomainInfo:
self.cleanupDomain()
+ def resumeDomain(self):
+ log.debug("XendDomainInfo.resumeDomain(%s)", str(self.domid))
+
+ try:
+ if self.domid is not None:
+ xc.domain_resume(self.domid)
+ except:
+ log.exception("XendDomainInfo.resume: xc.domain_resume failed on
domain %s." % (str(self.domid)))
+
#
# Channels for xenstore and console
#
diff -r fb46005e0756 -r fa960afcb0ac xen/common/domctl.c
--- a/xen/common/domctl.c Mon Jan 15 12:25:04 2007 +0000
+++ b/xen/common/domctl.c Mon Jan 15 12:00:35 2007 -0800
@@ -250,6 +250,31 @@ ret_t do_domctl(XEN_GUEST_HANDLE(xen_dom
}
break;
+ case XEN_DOMCTL_resumedomain:
+ {
+ struct domain *d = find_domain_by_id(op->domain);
+ struct vcpu *v;
+
+ ret = -ESRCH;
+ if ( d != NULL )
+ {
+ ret = -EINVAL;
+ printk("Resuming domain %d\n", op->domain);
+ if ( (d != current->domain) && (d->vcpu[0] != NULL) &&
+ test_bit(_DOMF_shutdown, &d->domain_flags) )
+ {
+ clear_bit(_DOMF_shutdown, &d->domain_flags);
+
+ for_each_vcpu (d, v)
+ vcpu_wake (v);
+
+ ret = 0;
+ }
+ put_domain(d);
+ }
+ }
+ break;
+
case XEN_DOMCTL_createdomain:
{
struct domain *d;
diff -r fb46005e0756 -r fa960afcb0ac xen/include/public/domctl.h
--- a/xen/include/public/domctl.h Mon Jan 15 12:25:04 2007 +0000
+++ b/xen/include/public/domctl.h Mon Jan 15 12:00:35 2007 -0800
@@ -63,6 +63,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_creat
#define XEN_DOMCTL_destroydomain 2
#define XEN_DOMCTL_pausedomain 3
#define XEN_DOMCTL_unpausedomain 4
+#define XEN_DOMCTL_resumedomain 27
#define XEN_DOMCTL_getdomaininfo 5
struct xen_domctl_getdomaininfo {
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|