[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2 of 3 V2] libxl: split libxl_domain_shutdown into libxl_domain_shutdown & libxl_domain_reboot
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1324028847 0 # Node ID 381829d0bb2b418a45962821718e824c353ae705 # Parent 38902f8c4ef37b841e1ec93b740108e0767aada4 libxl: split libxl_domain_shutdown into libxl_domain_shutdown & libxl_domain_reboot The other integer request types which shutdown supported are not useful. Specifically: * "suspend" is not usable via this interface since it requires other scaffolding, libxl_domain_suspend provides this already. * "halt" is the same as "poweroff". * "crash" is unused and at least Linux does not implement it. If a user steps forward then libxl_domain_crash is trivial to add. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> diff -r 38902f8c4ef3 -r 381829d0bb2b tools/libxl/libxl.c --- a/tools/libxl/libxl.c Fri Dec 16 09:34:46 2011 +0000 +++ b/tools/libxl/libxl.c Fri Dec 16 09:47:27 2011 +0000 @@ -594,38 +594,38 @@ int libxl__domain_pvcontrol_write(libxl_ return libxl__xs_write(gc, t, shutdown_path, "%s", cmd); } -static char *req_table[] = { - [0] = "poweroff", - [1] = "reboot", - [2] = "suspend", - [3] = "crash", - [4] = "halt", -}; - -int libxl_domain_shutdown(libxl_ctx *ctx, uint32_t domid, int req) +static int libxl__domain_pvcontrol(libxl__gc *gc, uint32_t domid, + const char *cmd) +{ + int ret; + + ret = libxl__domain_pvcontrol_available(gc, domid); + if (ret < 0) + return ret; + + if (!ret) { + LIBXL__LOG(CTX, LIBXL__LOG_ERROR, + "PV control interface not available\n"); + return ERROR_FAIL; + } + + return libxl__domain_pvcontrol_write(gc, XBT_NULL, domid, cmd); +} + +int libxl_domain_shutdown(libxl_ctx *ctx, uint32_t domid) { GC_INIT(ctx); int ret; - - if (req > ARRAY_SIZE(req_table)) { - GC_FREE; - return ERROR_INVAL; - } - - ret = libxl__domain_pvcontrol_available(gc, domid); - if (ret < 0) - goto out; - - if (!ret) { - LIBXL__LOG(CTX, LIBXL__LOG_ERROR, "PV shutdown control not available:" - " graceful shutdown not possible, use destroy"); - ret = ERROR_FAIL; - goto out; - } - - ret = libxl__domain_pvcontrol_write(gc, XBT_NULL, domid, req_table[req]); - -out: + ret = libxl__domain_pvcontrol(gc, domid, "poweroff"); + GC_FREE; + return ret; +} + +int libxl_domain_reboot(libxl_ctx *ctx, uint32_t domid) +{ + GC_INIT(ctx); + int ret; + ret = libxl__domain_pvcontrol(gc, domid, "reboot"); GC_FREE; return ret; } diff -r 38902f8c4ef3 -r 381829d0bb2b tools/libxl/libxl.h --- a/tools/libxl/libxl.h Fri Dec 16 09:34:46 2011 +0000 +++ b/tools/libxl/libxl.h Fri Dec 16 09:47:27 2011 +0000 @@ -268,7 +268,8 @@ void libxl_domain_config_dispose(libxl_d int libxl_domain_suspend(libxl_ctx *ctx, libxl_domain_suspend_info *info, uint32_t domid, int fd); int libxl_domain_resume(libxl_ctx *ctx, uint32_t domid); -int libxl_domain_shutdown(libxl_ctx *ctx, uint32_t domid, int req); +int libxl_domain_shutdown(libxl_ctx *ctx, uint32_t domid); +int libxl_domain_reboot(libxl_ctx *ctx, uint32_t domid); int libxl_domain_destroy(libxl_ctx *ctx, uint32_t domid, int force); int libxl_domain_preserve(libxl_ctx *ctx, uint32_t domid, libxl_domain_create_info *info, const char *name_suffix, libxl_uuid new_uuid); diff -r 38902f8c4ef3 -r 381829d0bb2b tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c Fri Dec 16 09:34:46 2011 +0000 +++ b/tools/libxl/xl_cmdimpl.c Fri Dec 16 09:47:27 2011 +0000 @@ -2265,7 +2265,7 @@ static void shutdown_domain(const char * int rc; find_domain(p); - rc=libxl_domain_shutdown(ctx, domid, 0); + rc=libxl_domain_shutdown(ctx, domid); if (rc) { fprintf(stderr,"shutdown failed (rc=%d)\n",rc);exit(-1); } if (wait) { @@ -2307,7 +2307,7 @@ static void reboot_domain(const char *p) { int rc; find_domain(p); - rc=libxl_domain_shutdown(ctx, domid, 1); + rc=libxl_domain_reboot(ctx, domid); if (rc) { fprintf(stderr,"reboot failed (rc=%d)\n",rc);exit(-1); } } diff -r 38902f8c4ef3 -r 381829d0bb2b tools/python/xen/lowlevel/xl/xl.c --- a/tools/python/xen/lowlevel/xl/xl.c Fri Dec 16 09:34:46 2011 +0000 +++ b/tools/python/xen/lowlevel/xl/xl.c Fri Dec 16 09:47:27 2011 +0000 @@ -424,10 +424,10 @@ static PyObject *pyxl_domid_to_name(XlOb static PyObject *pyxl_domain_shutdown(XlObject *self, PyObject *args) { - int domid, req = 0; - if ( !PyArg_ParseTuple(args, "i|i", &domid, &req) ) + int domid; + if ( !PyArg_ParseTuple(args, "i", &domid) ) return NULL; - if ( libxl_domain_shutdown(self->ctx, domid, req) ) { + if ( libxl_domain_shutdown(self->ctx, domid) ) { PyErr_SetString(xl_error_obj, "cannot shutdown domain"); return NULL; } @@ -435,6 +435,19 @@ static PyObject *pyxl_domain_shutdown(Xl return Py_None; } +static PyObject *pyxl_domain_reboot(XlObject *self, PyObject *args) +{ + int domid; + if ( !PyArg_ParseTuple(args, "i", &domid) ) + return NULL; + if ( libxl_domain_reboot(self->ctx, domid) ) { + PyErr_SetString(xl_error_obj, "cannot reboot domain"); + return NULL; + } + Py_INCREF(Py_None); + return Py_None; +} + static PyObject *pyxl_domain_destroy(XlObject *self, PyObject *args) { int domid, force = 1; @@ -637,6 +650,8 @@ static PyMethodDef pyxl_methods[] = { "Retrieve name from domain-id"}, {"domain_shutdown", (PyCFunction)pyxl_domain_shutdown, METH_VARARGS, "Shutdown a domain"}, + {"domain_reboot", (PyCFunction)pyxl_domain_reboot, METH_VARARGS, + "Reboot a domain"}, {"domain_destroy", (PyCFunction)pyxl_domain_destroy, METH_VARARGS, "Destroy a domain"}, {"domain_pause", (PyCFunction)pyxl_domain_pause, METH_VARARGS, _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |