diff options
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/examples/xc_dom_control.py | 10 | ||||
-rw-r--r-- | tools/xc/lib/xc_domain.c | 11 | ||||
-rw-r--r-- | tools/xc/py/Xc.c | 31 |
3 files changed, 43 insertions, 9 deletions
diff --git a/tools/examples/xc_dom_control.py b/tools/examples/xc_dom_control.py index 0ca2c97ac2..c21ff3c880 100755 --- a/tools/examples/xc_dom_control.py +++ b/tools/examples/xc_dom_control.py @@ -85,17 +85,9 @@ elif cmd == 'pincpu': sys.exit(-1) cpu = int(sys.argv[3]) - orig_state = xc.domain_getinfo(first_dom=dom, max_doms=1)[0]['stopped'] - - while xc.domain_getinfo(first_dom=dom, max_doms=1)[0]['stopped'] != 1: - xc.domain_stop( dom=dom ) - time.sleep(0.1) - + rc = xc.domain_pincpu( dom, cpu ) - if orig_state == 0: - xc.domain_start( dom=dom ) - elif cmd == 'list': print 'Dom Name Mem(kb) CPU State Time(s)' for domain in xc.domain_getinfo(): diff --git a/tools/xc/lib/xc_domain.c b/tools/xc/lib/xc_domain.c index 4d68f5d937..1d7da0442b 100644 --- a/tools/xc/lib/xc_domain.c +++ b/tools/xc/lib/xc_domain.c @@ -102,3 +102,14 @@ int xc_domain_getinfo(int xc_handle, return nr_doms; } + +int xc_shadow_control(int xc_handle, + u64 domid, + unsigned int sop) +{ + dom0_op_t op; + op.cmd = DOM0_SHADOW_CONTROL; + op.u.shadow_control.domain = (domid_t)domid; + op.u.shadow_control.op = sop; + return do_dom0_op(xc_handle, &op); +} diff --git a/tools/xc/py/Xc.c b/tools/xc/py/Xc.c index 3cbbe7efa6..5114b52afe 100644 --- a/tools/xc/py/Xc.c +++ b/tools/xc/py/Xc.c @@ -986,6 +986,28 @@ static PyObject *pyxc_rrobin_global_set(PyObject *self, return zero; } +static PyObject *pyxc_shadow_control(PyObject *self, + PyObject *args, + PyObject *kwds) +{ + XcObject *xc = (XcObject *)self; + + u64 dom; + int op=0; + + static char *kwd_list[] = { "dom", "op", NULL }; + + if ( !PyArg_ParseTupleAndKeywords(args, kwds, "L|i", kwd_list, + &dom, &op) ) + return NULL; + + if ( xc_shadow_control(xc->xc_handle, dom, op) != 0 ) + return PyErr_SetFromErrno(xc_error); + + Py_INCREF(zero); + return zero; +} + static PyObject *pyxc_rrobin_global_get(PyObject *self, PyObject *args, PyObject *kwds) @@ -1341,6 +1363,15 @@ static PyMethodDef pyxc_methods[] = { "Returns [dict]: information about the hardware" " [None]: on failure.\n" }, + { "shadow_control", + (PyCFunction)pyxc_shadow_control, + METH_VARARGS | METH_KEYWORDS, "\n" + "Set parameter for shadow pagetable interface\n" + " dom [long]: Identifier of domain.\n" + " op [int, 0]: operation\n\n" + "Returns: [int] 0 on success; -1 on error.\n" }, + + { NULL, NULL, 0, NULL } }; |