[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 05 of 10] pyxl: Export PCI passthrough related libxl functions
tools/python/xen/lowlevel/xl/xl.c | 74 +++++++++++++++++++++++++++++++++++++++ 1 files changed, 74 insertions(+), 0 deletions(-) # HG changeset patch # User Gianni Tedesco <gianni.tedesco@xxxxxxxxxx> # Date 1294761667 0 # Node ID fb64e8d377d84f99b0a0bac3d7f04dd62fea25b9 # Parent 791046eea8ded39ad09f1cf4b8482580e2a42e6a pyxl: Export PCI passthrough related libxl functions Signed-off-by: Gianni Tedesco <gianni.tedesco@xxxxxxxxxx> diff -r 791046eea8de -r fb64e8d377d8 tools/python/xen/lowlevel/xl/xl.c --- a/tools/python/xen/lowlevel/xl/xl.c Tue Jan 11 16:01:07 2011 +0000 +++ b/tools/python/xen/lowlevel/xl/xl.c Tue Jan 11 16:01:07 2011 +0000 @@ -537,6 +537,75 @@ static PyObject *pyxl_pci_parse(XlObject return (PyObject *)pci; } +static PyObject *pyxl_pci_list_assignable(XlObject *self, PyObject *args) +{ + libxl_device_pci *dev; + PyObject *list; + int nr_dev, i; + + if ( libxl_device_pci_list_assignable(&self->ctx, &dev, &nr_dev) ) { + PyErr_SetString(xl_error_obj, "Cannot list assignable devices"); + return NULL; + } + + list = PyList_New(nr_dev); + if ( NULL == list ) + return NULL; + + for(i = 0; i < nr_dev; i++) { + Py_device_pci *pd; + pd = Pydevice_pci_New(); + if ( NULL == pd ) + goto err_mem; + memcpy(&pd->obj, &dev[i], sizeof(pd->obj)); + /* SetItem steals a reference */ + PyList_SetItem(list, i, (PyObject *)pd); + } + + free(dev); + return list; +err_mem: + Py_DECREF(list); + PyErr_SetString(PyExc_MemoryError, "Allocating PCI device list"); + return NULL; +} + +static PyObject *pyxl_pci_list(XlObject *self, PyObject *args) +{ + libxl_device_pci *dev; + PyObject *list; + int nr_dev, i, domid; + + if ( !PyArg_ParseTuple(args, "i", &domid) ) + return NULL; + + if ( libxl_device_pci_list_assigned(&self->ctx, &dev, domid, &nr_dev) ) { + PyErr_SetString(xl_error_obj, "Cannot list assignable devices"); + return NULL; + } + + list = PyList_New(nr_dev); + if ( NULL == list ) + return NULL; + + for(i = 0; i < nr_dev; i++) { + Py_device_pci *pd; + pd = Pydevice_pci_New(); + if ( NULL == pd ) + goto err_mem; + memcpy(&pd->obj, &dev[i], sizeof(pd->obj)); + /* SetItem steals a reference */ + PyList_SetItem(list, i, (PyObject *)pd); + } + + free(dev); + return list; +err_mem: + Py_DECREF(list); + PyErr_SetString(PyExc_MemoryError, "Allocating PCI device list"); + return NULL; +} + static PyMethodDef pyxl_methods[] = { {"list_domains", (PyCFunction)pyxl_list_domains, METH_NOARGS, "List domains"}, @@ -558,6 +627,11 @@ static PyMethodDef pyxl_methods[] = { "Remove a pass-through PCI device"}, {"device_pci_parse_bdf", (PyCFunction)pyxl_pci_parse, METH_VARARGS, "Parse pass-through PCI device spec (BDF)"}, + {"device_pci_list", (PyCFunction)pyxl_pci_list, METH_VARARGS, + "List PCI devices assigned to a domain"}, + {"device_pci_list_assignable", + (PyCFunction)pyxl_pci_list_assignable, METH_NOARGS, + "List assignable PCI devices"}, { NULL, NULL, 0, NULL } }; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |