[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] xenstore: add XS_RESUME command; export it to xend.
# HG changeset patch # User kfraser@xxxxxxxxxxxxxxxxxxxxx # Date 1169220514 0 # Node ID 9a1809ce711b0c61bc2bf302218efeb95637cf6b # Parent dcb145f858e32a1d310a5558d4e12bb0521a625d xenstore: add XS_RESUME command; export it to xend. This clears the shutdown flag for a domain in xenstore, allowing subsequent shutdowns of the same domain to fire the appropriate watches. Signed-off-by: Brendan Cully <brendan@xxxxxxxxx> --- tools/python/xen/lowlevel/xs/xs.c | 28 +++++++++++++++++++++++ tools/python/xen/xend/XendDomainInfo.py | 3 +- tools/python/xen/xend/xenstore/xsutil.py | 3 ++ tools/xenstore/xenstored_core.c | 5 ++++ tools/xenstore/xenstored_domain.c | 37 +++++++++++++++++++++++++++++++ tools/xenstore/xenstored_domain.h | 3 ++ tools/xenstore/xs.c | 6 +++++ tools/xenstore/xs.h | 5 ++++ 8 files changed, 89 insertions(+), 1 deletion(-) diff -r dcb145f858e3 -r 9a1809ce711b tools/python/xen/lowlevel/xs/xs.c --- a/tools/python/xen/lowlevel/xs/xs.c Fri Jan 19 15:23:41 2007 +0000 +++ b/tools/python/xen/lowlevel/xs/xs.c Fri Jan 19 15:28:34 2007 +0000 @@ -618,6 +618,33 @@ static PyObject *xspy_introduce_domain(X return none(result); } +#define xspy_resume_domain_doc "\n" \ + "Tell xenstore to clear its shutdown flag for a domain.\n" \ + "This ensures that a subsequent shutdown will fire the\n" \ + "appropriate watches.\n" \ + " dom [int]: domain id\n" \ + "\n" \ + "Returns None on success.\n" \ + "Raises xen.lowlevel.xs.Error on error.\n" + +static PyObject *xspy_resume_domain(XsHandle *self, PyObject *args) +{ + uint32_t dom; + + struct xs_handle *xh = xshandle(self); + bool result = 0; + + if (!xh) + return NULL; + if (!PyArg_ParseTuple(args, "i", &dom)) + return NULL; + + Py_BEGIN_ALLOW_THREADS + result = xs_resume_domain(xh, dom); + Py_END_ALLOW_THREADS + + return none(result); +} #define xspy_release_domain_doc "\n" \ "Tell xenstore to release its channel to a domain.\n" \ @@ -789,6 +816,7 @@ static PyMethodDef xshandle_methods[] = XSPY_METH(transaction_start, METH_NOARGS), XSPY_METH(transaction_end, METH_VARARGS | METH_KEYWORDS), XSPY_METH(introduce_domain, METH_VARARGS), + XSPY_METH(resume_domain, METH_VARARGS), XSPY_METH(release_domain, METH_VARARGS), XSPY_METH(close, METH_NOARGS), XSPY_METH(get_domain_path, METH_VARARGS), diff -r dcb145f858e3 -r 9a1809ce711b tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Fri Jan 19 15:23:41 2007 +0000 +++ b/tools/python/xen/xend/XendDomainInfo.py Fri Jan 19 15:28:34 2007 +0000 @@ -45,7 +45,7 @@ from xen.xend.XendError import XendError from xen.xend.XendError import XendError, VmError from xen.xend.XendDevices import XendDevices from xen.xend.xenstore.xstransact import xstransact, complete -from xen.xend.xenstore.xsutil import GetDomainPath, IntroduceDomain +from xen.xend.xenstore.xsutil import GetDomainPath, IntroduceDomain, ResumeDomain from xen.xend.xenstore.xswatch import xswatch from xen.xend.XendConstants import * from xen.xend.XendAPIConstants import * @@ -1545,6 +1545,7 @@ class XendDomainInfo: try: if self.domid is not None: xc.domain_resume(self.domid) + ResumeDomain(self.domid) except: log.exception("XendDomainInfo.resume: xc.domain_resume failed on domain %s." % (str(self.domid))) diff -r dcb145f858e3 -r 9a1809ce711b tools/python/xen/xend/xenstore/xsutil.py --- a/tools/python/xen/xend/xenstore/xsutil.py Fri Jan 19 15:23:41 2007 +0000 +++ b/tools/python/xen/xend/xenstore/xsutil.py Fri Jan 19 15:28:34 2007 +0000 @@ -24,3 +24,6 @@ def IntroduceDomain(domid, page, port): def GetDomainPath(domid): return xshandle().get_domain_path(domid) + +def ResumeDomain(domid): + return xshandle().resume_domain(domid) diff -r dcb145f858e3 -r 9a1809ce711b tools/xenstore/xenstored_core.c --- a/tools/xenstore/xenstored_core.c Fri Jan 19 15:23:41 2007 +0000 +++ b/tools/xenstore/xenstored_core.c Fri Jan 19 15:28:34 2007 +0000 @@ -164,6 +164,7 @@ static char *sockmsg_string(enum xsd_soc case XS_WATCH_EVENT: return "WATCH_EVENT"; case XS_ERROR: return "ERROR"; case XS_IS_DOMAIN_INTRODUCED: return "XS_IS_DOMAIN_INTRODUCED"; + case XS_RESUME: return "RESUME"; default: return "**UNKNOWN**"; } @@ -1265,6 +1266,10 @@ static void process_message(struct conne case XS_GET_DOMAIN_PATH: do_get_domain_path(conn, onearg(in)); + break; + + case XS_RESUME: + do_resume(conn, onearg(in)); break; default: diff -r dcb145f858e3 -r 9a1809ce711b tools/xenstore/xenstored_domain.c --- a/tools/xenstore/xenstored_domain.c Fri Jan 19 15:23:41 2007 +0000 +++ b/tools/xenstore/xenstored_domain.c Fri Jan 19 15:28:34 2007 +0000 @@ -395,6 +395,43 @@ void do_release(struct connection *conn, send_ack(conn, XS_RELEASE); } +void do_resume(struct connection *conn, const char *domid_str) +{ + struct domain *domain; + unsigned int domid; + + if (!domid_str) { + send_error(conn, EINVAL); + return; + } + + domid = atoi(domid_str); + if (!domid) { + send_error(conn, EINVAL); + return; + } + + if (conn->id != 0) { + send_error(conn, EACCES); + return; + } + + domain = find_domain_by_domid(domid); + if (!domain) { + send_error(conn, ENOENT); + return; + } + + if (!domain->conn) { + send_error(conn, EINVAL); + return; + } + + domain->shutdown = 0; + + send_ack(conn, XS_RESUME); +} + void do_get_domain_path(struct connection *conn, const char *domid_str) { char *path; diff -r dcb145f858e3 -r 9a1809ce711b tools/xenstore/xenstored_domain.h --- a/tools/xenstore/xenstored_domain.h Fri Jan 19 15:23:41 2007 +0000 +++ b/tools/xenstore/xenstored_domain.h Fri Jan 19 15:28:34 2007 +0000 @@ -32,6 +32,9 @@ void do_release(struct connection *conn, void do_release(struct connection *conn, const char *domid_str); /* domid */ +void do_resume(struct connection *conn, const char *domid_str); + +/* domid */ void do_get_domain_path(struct connection *conn, const char *domid_str); /* Returns the event channel handle */ diff -r dcb145f858e3 -r 9a1809ce711b tools/xenstore/xs.c --- a/tools/xenstore/xs.c Fri Jan 19 15:23:41 2007 +0000 +++ b/tools/xenstore/xs.c Fri Jan 19 15:28:34 2007 +0000 @@ -719,6 +719,12 @@ bool xs_release_domain(struct xs_handle return xs_bool(single_with_domid(h, XS_RELEASE, domid)); } +/* clear the shutdown bit for the given domain */ +bool xs_resume_domain(struct xs_handle *h, unsigned int domid) +{ + return xs_bool(single_with_domid(h, XS_RESUME, domid)); +} + char *xs_get_domain_path(struct xs_handle *h, unsigned int domid) { char domid_str[MAX_STRLEN(domid)]; diff -r dcb145f858e3 -r 9a1809ce711b tools/xenstore/xs.h --- a/tools/xenstore/xs.h Fri Jan 19 15:23:41 2007 +0000 +++ b/tools/xenstore/xs.h Fri Jan 19 15:28:34 2007 +0000 @@ -133,6 +133,11 @@ bool xs_introduce_domain(struct xs_handl unsigned int domid, unsigned long mfn, unsigned int eventchn); +/* Resume a domain. + * Clear the shutdown flag for this domain in the store. + */ +bool xs_resume_domain(struct xs_handle *h, unsigned int domid); + /* Release a domain. * Tells the store domain to release the memory page to the domain. */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |