aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rwxr-xr-xtools/examples/xc_dom_control.py10
-rw-r--r--tools/xc/lib/xc_domain.c11
-rw-r--r--tools/xc/py/Xc.c31
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 }
};