From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Wei Liu <wei.liu2@citrix.com>, zhigang.x.wang@oracle.com
Cc: xen-devel@lists.xenproject.org,
Ian Jackson <Ian.Jackson@eu.citrix.com>,
Ian Campbell <ian.campbell@citrix.com>,
Andrew Cooper <andrew.cooper3@citrix.com>
Subject: Re: [PATCH] tools/python: remove broken xl binding
Date: Tue, 6 Oct 2015 14:09:13 -0400 [thread overview]
Message-ID: <20151006180913.GE11870@localhost.localdomain> (raw)
In-Reply-To: <20151006180657.GD11870@localhost.localdomain>
On Tue, Oct 06, 2015 at 02:06:57PM -0400, Konrad Rzeszutek Wilk wrote:
> On Tue, Oct 06, 2015 at 05:57:26PM +0100, Wei Liu wrote:
> > Various people say this binding doesn't compile or doesn't work. Remove
> > it for the benefit of xl feature development -- so that new features
> > won't need to worry about making this broken binding happy.
> >
> > This isn't going to expose any user visible changes because that module
> > is not built by default.
> >
> > Signed-off-by: Wei Liu <wei.liu2@citrix.com>
>
> CC-ing Zhigang.
Actually doing it.
>
> > ---
> > tools/python/setup.py | 9 -
> > tools/python/xen/lowlevel/xl/xl.c | 797 --------------------------------------
> > 2 files changed, 806 deletions(-)
> > delete mode 100644 tools/python/xen/lowlevel/xl/xl.c
> >
> > diff --git a/tools/python/setup.py b/tools/python/setup.py
> > index 5bf81be..fdba866 100644
> > --- a/tools/python/setup.py
> > +++ b/tools/python/setup.py
> > @@ -27,17 +27,8 @@ xs = Extension("xs",
> > depends = [ PATH_XENSTORE + "/libxenstore.so" ],
> > sources = [ "xen/lowlevel/xs/xs.c" ])
> >
> > -xl = Extension("xl",
> > - extra_compile_args = extra_compile_args,
> > - include_dirs = [ PATH_XEN, PATH_LIBXL, PATH_LIBXC + "/include", "xen/lowlevel/xl" ],
> > - library_dirs = [ PATH_LIBXL ],
> > - libraries = [ "xenlight" ],
> > - depends = [ PATH_LIBXL + "/libxenlight.so" ],
> > - sources = [ "xen/lowlevel/xl/xl.c", "xen/lowlevel/xl/_pyxl_types.c" ])
> > -
> > plat = os.uname()[0]
> > modules = [ xc, xs ]
> > -#modules.extend([ xl ])
> >
> > setup(name = 'xen',
> > version = '3.0',
> > diff --git a/tools/python/xen/lowlevel/xl/xl.c b/tools/python/xen/lowlevel/xl/xl.c
> > deleted file mode 100644
> > index 9b33731..0000000
> > --- a/tools/python/xen/lowlevel/xl/xl.c
> > +++ /dev/null
> > @@ -1,797 +0,0 @@
> > -/******************************************************************************
> > - * xl.c
> > - *
> > - * Copyright (c) 2010 Citrix Ltd.
> > - * Author: Gianni Tedesco
> > - *
> > - * This library is free software; you can redistribute it and/or
> > - * modify it under the terms of version 2.1 of the GNU Lesser General Public
> > - * License as published by the Free Software Foundation.
> > - *
> > - * This library is distributed in the hope that it will be useful,
> > - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> > - * Lesser General Public License for more details.
> > - *
> > - * You should have received a copy of the GNU Lesser General Public
> > - * License along with this library; If not, see <http://www.gnu.org/licenses/>.
> > - *
> > - */
> > -
> > -#include <Python.h>
> > -#include <stdio.h>
> > -#include <assert.h>
> > -#include <stdlib.h>
> > -#include <string.h>
> > -#include <unistd.h>
> > -#include <time.h>
> > -#include <getopt.h>
> > -#include <sys/types.h>
> > -#include <sys/stat.h>
> > -#include <sys/time.h>
> > -#include <fcntl.h>
> > -#include <signal.h>
> > -#include <sys/socket.h>
> > -#include <sys/select.h>
> > -#include <arpa/inet.h>
> > -#include <ctype.h>
> > -#include <inttypes.h>
> > -
> > -#include <libxl.h>
> > -#include <libxl_utils.h>
> > -#include <libxlutil.h>
> > -
> > -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
> > -
> > -/* Needed for Python versions earlier than 2.3. */
> > -#ifndef PyMODINIT_FUNC
> > -#define PyMODINIT_FUNC DL_EXPORT(void)
> > -#endif
> > -
> > -#define CLS "ctx"
> > -
> > -#if PY_MAJOR_VERSION < 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 5)
> > -#define Py_ssize_t int
> > -#endif
> > -
> > -static PyObject *xl_error_obj;
> > -
> > -int genwrap__obj_init(PyObject *self, PyObject *args, PyObject *kwds)
> > -{
> > - PyObject *key, *value;
> > - Py_ssize_t pos = 0;
> > -
> > - if ( NULL == kwds )
> > - return 0;
> > -
> > - while (PyDict_Next(kwds, &pos, &key, &value)) {
> > - if ( PyObject_SetAttr(self, key, value) < 0 )
> > - return -1;
> > - }
> > -
> > - return 0;
> > -}
> > -
> > -int genwrap__string_set(PyObject *v, char **str)
> > -{
> > - char *tmp;
> > - if ( NULL == v || Py_None == v ) {
> > - free(*str);
> > - *str = NULL;
> > - return 0;
> > - }
> > - if ( !PyString_Check(v) ) {
> > - PyErr_SetString(PyExc_TypeError, "Attribute expected string");
> > - return -1;
> > - }
> > - tmp = strdup(PyString_AsString(v));
> > - if ( NULL == tmp ) {
> > - PyErr_SetString(PyExc_MemoryError, "Allocating string attribute");
> > - return -1;
> > - }
> > - free(*str);
> > - *str = tmp;
> > - return 0;
> > -}
> > -
> > -PyObject *genwrap__string_get(char **str)
> > -{
> > - if ( NULL == *str ) {
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > - }
> > - return PyString_FromString(*str);
> > -}
> > -
> > -PyObject *genwrap__ull_get(unsigned long long val)
> > -{
> > - return PyLong_FromUnsignedLongLong(val);
> > -}
> > -
> > -int genwrap__ull_set(PyObject *v, unsigned long long *val, unsigned long long mask)
> > -{
> > - unsigned long long tmp;
> > - if ( NULL == v ) {
> > - *val = 0;
> > - return 0;
> > - }
> > - if ( PyLong_Check(v) ) {
> > - tmp = PyLong_AsUnsignedLongLong(v);
> > - }else if ( PyInt_Check(v) ) {
> > - tmp = (unsigned long long)PyInt_AsLong(v);
> > - }else{
> > - PyErr_SetString(PyExc_TypeError, "Attribute expected int or long");
> > - return -1;
> > - }
> > - if ( tmp & ~mask ) {
> > - PyErr_SetString(PyExc_ValueError, "Integer overflow");
> > - return -1;
> > - }
> > - *val = tmp;
> > - return 0;
> > -}
> > -
> > -PyObject *genwrap__ll_get(long long val)
> > -{
> > - return PyLong_FromLongLong(val);
> > -}
> > -
> > -int genwrap__ll_set(PyObject *v, long long *val, long long mask)
> > -{
> > - long long tmp;
> > - if ( NULL == v ) {
> > - *val = 0;
> > - return 0;
> > - }
> > - if ( PyLong_Check(v) ) {
> > - tmp = PyLong_AsLongLong(v);
> > - }else{
> > - tmp = (long long)PyInt_AsLong(v);
> > - }
> > - if ( tmp & ~mask ) {
> > - PyErr_SetString(PyExc_ValueError, "Integer overflow");
> > - return -1;
> > - }
> > - *val = tmp;
> > - return 0;
> > -}
> > -
> > -PyObject *genwrap__defbool_get(libxl_defbool *db)
> > -{
> > - PyObject *ret;
> > - ret = libxl_defbool_val(*db) ? Py_True : Py_False;
> > - Py_INCREF(ret);
> > - return ret;
> > -}
> > -
> > -int genwrap__defbool_set(PyObject *v, libxl_defbool *db)
> > -{
> > - bool val = !(NULL == v || Py_None == v || Py_False == v);
> > - libxl_defbool_set(db, val);
> > - return 0;
> > -}
> > -
> > -static int fixed_bytearray_set(PyObject *v, uint8_t *ptr, size_t len)
> > -{
> > - char *tmp;
> > - size_t sz;
> > -
> > - if ( NULL == v ) {
> > - memset(ptr, 0, len);
> > - return 0;
> > - }
> > -
> > -#ifdef PyByteArray_Check
> > - if ( PyByteArray_Check(v) ) {
> > - sz = PyByteArray_Size(v);
> > - tmp = PyByteArray_AsString(v);
> > - }else
> > -#endif
> > - if ( PyString_Check(v) ) {
> > - Py_ssize_t ssz;
> > - if ( PyString_AsStringAndSize(v, &tmp, &ssz) )
> > - return -1;
> > - if ( ssz < 0 )
> > - tmp = NULL;
> > - sz = ssz;
> > - }else{
> > - PyErr_SetString(PyExc_TypeError, "Attribute expected bytearray or string");
> > - return -1;
> > - }
> > -
> > - if ( NULL == tmp ) {
> > - memset(ptr, 0, len);
> > - return 0;
> > - }
> > - if ( sz != len ) {
> > - PyErr_SetString(PyExc_ValueError,
> > - (sz < len) ? "Buffer underflow" : "Buffer overflow");
> > - return -1;
> > - }
> > -
> > - memcpy(ptr, tmp, sz);
> > - return 0;
> > -}
> > -
> > -static PyObject *fixed_bytearray_get(const uint8_t *ptr, size_t len)
> > -{
> > -#ifdef PyByteArray_Check
> > - return PyByteArray_FromStringAndSize((const char *)ptr, len);
> > -#else
> > - return PyString_FromStringAndSize((const char *)ptr, len);
> > -#endif
> > -}
> > -
> > -#include "_pyxl_types.h"
> > -
> > -int attrib__libxl_cpuid_policy_list_set(PyObject *v, libxl_cpuid_policy_list *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Setting cpuid_policy_list");
> > - return -1;
> > -}
> > -
> > -int attrib__libxl_bitmap_set(PyObject *v, libxl_bitmap *pptr)
> > -{
> > - int i;
> > - long cpu;
> > -
> > - for (i = 0; i < PyList_Size(v); i++) {
> > - cpu = PyInt_AsLong(PyList_GetItem(v, i));
> > - libxl_bitmap_set(pptr, cpu);
> > - }
> > - return 0;
> > -}
> > -
> > -int attrib__libxl_hwcap_set(PyObject *v, libxl_hwcap *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Setting hwcap");
> > - return -1;
> > -}
> > -
> > -int attrib__libxl_key_value_list_set(PyObject *v, libxl_key_value_list *pptr)
> > -{
> > - if ( *pptr ) {
> > - libxl_key_value_list_dispose(pptr);
> > - *pptr = NULL;
> > - }
> > - if ( v == Py_None )
> > - return 0;
> > - return -1;
> > -}
> > -
> > -int attrib__libxl_mac_set(PyObject *v, libxl_mac *pptr)
> > -{
> > - return fixed_bytearray_set(v, *pptr, 6);
> > -}
> > -
> > -int attrib__libxl_string_list_set(PyObject *v, libxl_string_list *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Setting string_list");
> > - return -1;
> > -}
> > -
> > -int attrib__libxl_uuid_set(PyObject *v, libxl_uuid *pptr)
> > -{
> > - return fixed_bytearray_set(v, libxl_uuid_bytearray(pptr), 16);
> > -}
> > -
> > -int attrib__libxl_domid_set(PyObject *v, libxl_domid *domid) {
> > - *domid = PyInt_AsLong(v);
> > - return 0;
> > -}
> > -
> > -int attrib__libxl_devid_set(PyObject *v, libxl_devid *devid) {
> > - *devid = PyInt_AsLong(v);
> > - return 0;
> > -}
> > -
> > -int attrib__struct_in_addr_set(PyObject *v, struct in_addr *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Setting in_addr");
> > - return -1;
> > -}
> > -
> > -PyObject *attrib__libxl_cpuid_policy_list_get(libxl_cpuid_policy_list *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Getting cpuid_policy_list");
> > - return NULL;
> > -}
> > -
> > -PyObject *attrib__libxl_bitmap_get(libxl_bitmap *pptr)
> > -{
> > - PyObject *cpulist = NULL;
> > - int i;
> > -
> > - cpulist = PyList_New(0);
> > - libxl_for_each_bit(i, *pptr) {
> > - if ( libxl_bitmap_test(pptr, i) ) {
> > - PyObject* pyint = PyInt_FromLong(i);
> > -
> > - PyList_Append(cpulist, pyint);
> > - Py_DECREF(pyint);
> > - }
> > - }
> > - return cpulist;
> > -}
> > -
> > -PyObject *attrib__libxl_hwcap_get(libxl_hwcap *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Getting hwcap");
> > - return NULL;
> > -}
> > -
> > -PyObject *attrib__libxl_key_value_list_get(libxl_key_value_list *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Getting key_value_list");
> > - return NULL;
> > -}
> > -
> > -PyObject *attrib__libxl_mac_get(libxl_mac *pptr)
> > -{
> > - return fixed_bytearray_get(*pptr, 6);
> > -}
> > -
> > -PyObject *attrib__libxl_string_list_get(libxl_string_list *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Getting string_list");
> > - return NULL;
> > -}
> > -
> > -PyObject *attrib__libxl_uuid_get(libxl_uuid *pptr)
> > -{
> > - return fixed_bytearray_get(libxl_uuid_bytearray(pptr), 16);
> > -}
> > -
> > -PyObject *attrib__libxl_domid_get(libxl_domid *domid) {
> > - return PyInt_FromLong(*domid);
> > -}
> > -
> > -PyObject *attrib__libxl_devid_get(libxl_devid *devid) {
> > - return PyInt_FromLong(*devid);
> > -}
> > -
> > -PyObject *attrib__struct_in_addr_get(struct in_addr *pptr)
> > -{
> > - PyErr_SetString(PyExc_NotImplementedError, "Getting in_addr");
> > - return NULL;
> > -}
> > -
> > -typedef struct {
> > - PyObject_HEAD;
> > - libxl_ctx *ctx;
> > - xentoollog_logger_stdiostream *logger;
> > - xentoollog_level minmsglevel;
> > -} XlObject;
> > -
> > -static PyObject *pyxl_list_domains(XlObject *self)
> > -{
> > - libxl_dominfo *cur, *info;
> > - PyObject *list;
> > - int nr_dom, i;
> > -
> > - info = libxl_list_domain(self->ctx, &nr_dom);
> > - if ( NULL == info )
> > - return PyList_New(0);
> > -
> > - list = PyList_New(nr_dom);
> > - if ( NULL == list )
> > - goto err_mem;
> > -
> > - for(i = 0, cur = info; i < nr_dom; i++, cur++) {
> > - Py_dominfo *di;
> > - di = Pydominfo_New();
> > - if ( NULL == di )
> > - goto err_mem;
> > - memcpy(&di->obj, cur, sizeof(di->obj));
> > - /* SetItem steals a reference */
> > - PyList_SetItem(list, i, (PyObject *)di);
> > - }
> > -
> > - free(info);
> > - return list;
> > -err_mem:
> > - Py_DECREF(list);
> > - PyErr_SetString(PyExc_MemoryError, "Allocating domain list");
> > - return NULL;
> > -}
> > -
> > -static PyObject *pyxl_domid_to_name(XlObject *self, PyObject *args)
> > -{
> > - char *domname;
> > - int domid;
> > - PyObject *ret = Py_None;
> > -
> > - if ( !PyArg_ParseTuple(args, "i", &domid) )
> > - return NULL;
> > -
> > - domname = libxl_domid_to_name(self->ctx, domid);
> > - if (domname)
> > - ret = PyString_FromString(domname);
> > - else
> > - Py_INCREF(Py_None);
> > - free(domname);
> > -
> > - return ret;
> > -}
> > -
> > -static PyObject *pyxl_domain_shutdown(XlObject *self, PyObject *args)
> > -{
> > - int domid;
> > - if ( !PyArg_ParseTuple(args, "i", &domid) )
> > - return NULL;
> > - if ( libxl_domain_shutdown(self->ctx, domid) ) {
> > - PyErr_SetString(xl_error_obj, "cannot shutdown domain");
> > - return NULL;
> > - }
> > - Py_INCREF(Py_None);
> > - 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;
> > - if ( !PyArg_ParseTuple(args, "i", &domid) )
> > - return NULL;
> > - if ( libxl_domain_destroy(self->ctx, domid, 0) ) {
> > - PyErr_SetString(xl_error_obj, "cannot destroy domain");
> > - return NULL;
> > - }
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > -}
> > -
> > -static PyObject *pyxl_domain_pause(XlObject *self, PyObject *args)
> > -{
> > - int domid;
> > - if ( !PyArg_ParseTuple(args, "i", &domid) )
> > - return NULL;
> > - if ( libxl_domain_pause(self->ctx, domid) ) {
> > - PyErr_SetString(xl_error_obj, "cannot pause domain");
> > - return NULL;
> > - }
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > -}
> > -
> > -static PyObject *pyxl_domain_unpause(XlObject *self, PyObject *args)
> > -{
> > - int domid;
> > - if ( !PyArg_ParseTuple(args, "i", &domid) )
> > - return NULL;
> > - if ( libxl_domain_unpause(self->ctx, domid) ) {
> > - PyErr_SetString(xl_error_obj, "cannot unpause domain");
> > - return NULL;
> > - }
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > -}
> > -
> > -static PyObject *pyxl_domain_rename(XlObject *self, PyObject *args)
> > -{
> > - char *old_name = NULL, *new_name;
> > - int domid;
> > - if ( !PyArg_ParseTuple(args, "is|s", &domid, &new_name, &old_name) )
> > - return NULL;
> > - if ( libxl_domain_rename(self->ctx, domid, old_name, new_name) ) {
> > - PyErr_SetString(xl_error_obj, "cannot rename domain");
> > - return NULL;
> > - }
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > -}
> > -
> > -static PyObject *pyxl_pci_add(XlObject *self, PyObject *args)
> > -{
> > - Py_device_pci *pci;
> > - PyObject *obj;
> > - int domid;
> > - if ( !PyArg_ParseTuple(args, "iO", &domid, &obj) )
> > - return NULL;
> > - if ( !Pydevice_pci_Check(obj) ) {
> > - PyErr_SetString(PyExc_TypeError, "Xxpected xl.device_pci");
> > - return NULL;
> > - }
> > - pci = (Py_device_pci *)obj;
> > - if ( libxl_device_pci_add(self->ctx, domid, &pci->obj, 0) ) {
> > - PyErr_SetString(xl_error_obj, "cannot add pci device");
> > - return NULL;
> > - }
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > -}
> > -
> > -static PyObject *pyxl_pci_del(XlObject *self, PyObject *args)
> > -{
> > - Py_device_pci *pci;
> > - PyObject *obj;
> > - int domid, force = 0;
> > -
> > - if ( !PyArg_ParseTuple(args, "iO|i", &domid, &obj, &force) )
> > - return NULL;
> > - if ( !Pydevice_pci_Check(obj) ) {
> > - PyErr_SetString(PyExc_TypeError, "Xxpected xl.device_pci");
> > - return NULL;
> > - }
> > - pci = (Py_device_pci *)obj;
> > - if ( force ) {
> > - if ( libxl_device_pci_destroy(self->ctx, domid, &pci->obj, 0) ) {
> > - PyErr_SetString(xl_error_obj, "cannot remove pci device");
> > - return NULL;
> > - }
> > - } else {
> > - if ( libxl_device_pci_remove(self->ctx, domid, &pci->obj, 0) ) {
> > - PyErr_SetString(xl_error_obj, "cannot remove pci device");
> > - return NULL;
> > - }
> > - }
> > - Py_INCREF(Py_None);
> > - return Py_None;
> > -}
> > -
> > -static PyObject *pyxl_pci_parse(XlObject *self, PyObject *args)
> > -{
> > - Py_device_pci *pci;
> > - char *str;
> > -
> > - if ( !PyArg_ParseTuple(args, "s", &str) )
> > - return NULL;
> > -
> > - pci = Pydevice_pci_New();
> > - if ( NULL == pci ) {
> > - PyErr_SetString(PyExc_MemoryError, "Allocating domain list");
> > - return NULL;
> > - }
> > -
> > - if ( xlu_pci_parse_bdf(NULL, &pci->obj, str) ) {
> > - PyErr_SetString(xl_error_obj, "cannot parse pci device spec (BDF)");
> > - Py_DECREF(pci);
> > - return NULL;
> > - }
> > -
> > - return (PyObject *)pci;
> > -}
> > -
> > -static PyObject *pyxl_pci_assignable_list(XlObject *self, PyObject *args)
> > -{
> > - libxl_device_pci *dev;
> > - PyObject *list;
> > - int nr_dev, i;
> > -
> > - dev = libxl_device_pci_assignable_list(self->ctx, &nr_dev);
> > - if ( dev == NULL ) {
> > - 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;
> > -
> > - dev = libxl_device_pci_list(self->ctx, domid, &nr_dev);
> > - if ( dev == NULL ) {
> > - 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"},
> > - {"domid_to_name", (PyCFunction)pyxl_domid_to_name, METH_VARARGS,
> > - "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,
> > - "Pause a domain"},
> > - {"domain_unpause", (PyCFunction)pyxl_domain_unpause, METH_VARARGS,
> > - "Unpause a domain"},
> > - {"domain_rename", (PyCFunction)pyxl_domain_rename, METH_VARARGS,
> > - "Rename a domain"},
> > - {"device_pci_add", (PyCFunction)pyxl_pci_add, METH_VARARGS,
> > - "Insert a pass-through PCI device"},
> > - {"device_pci_del", (PyCFunction)pyxl_pci_del, METH_VARARGS,
> > - "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_assignable_list",
> > - (PyCFunction)pyxl_pci_assignable_list, METH_NOARGS,
> > - "List assignable PCI devices"},
> > - { NULL, NULL, 0, NULL }
> > -};
> > -
> > -static PyObject *PyXl_getattr(PyObject *obj, char *name)
> > -{
> > - return Py_FindMethod(pyxl_methods, obj, name);
> > -}
> > -
> > -static PyObject *PyXl_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
> > -{
> > - XlObject *self = (XlObject *)type->tp_alloc(type, 0);
> > -
> > - if (self == NULL)
> > - return NULL;
> > -
> > - self->ctx = NULL;
> > - self->logger = NULL;
> > - self->minmsglevel = XTL_PROGRESS;
> > -
> > - return (PyObject *)self;
> > -}
> > -
> > -static int
> > -PyXl_init(XlObject *self, PyObject *args, PyObject *kwds)
> > -{
> > - self->logger = xtl_createlogger_stdiostream(stderr, self->minmsglevel, 0);
> > - if (!self->logger) {
> > - PyErr_SetString(xl_error_obj, "cannot init xl logger");
> > - return -1;
> > - }
> > -
> > - if ( libxl_ctx_alloc(&self->ctx, LIBXL_VERSION, 0,
> > - (xentoollog_logger*)self->logger) ) {
> > - PyErr_SetString(xl_error_obj, "cannot init xl context");
> > - return -1;
> > - }
> > -
> > - return 0;
> > -}
> > -
> > -static void PyXl_dealloc(XlObject *self)
> > -{
> > - libxl_ctx_free(self->ctx);
> > - if ( self->logger )
> > - xtl_logger_destroy((xentoollog_logger*)self->logger);
> > -
> > - self->ob_type->tp_free((PyObject *)self);
> > -}
> > -
> > -static PyTypeObject PyXlType = {
> > - PyObject_HEAD_INIT(NULL)
> > - 0,
> > - PKG "." CLS,
> > - sizeof(XlObject),
> > - 0,
> > - (destructor)PyXl_dealloc, /* tp_dealloc */
> > - NULL, /* tp_print */
> > - PyXl_getattr, /* tp_getattr */
> > - NULL, /* tp_setattr */
> > - NULL, /* tp_compare */
> > - NULL, /* tp_repr */
> > - NULL, /* tp_as_number */
> > - NULL, /* tp_as_sequence */
> > - NULL, /* tp_as_mapping */
> > - NULL, /* tp_hash */
> > - NULL, /* tp_call */
> > - NULL, /* tp_str */
> > - NULL, /* tp_getattro */
> > - NULL, /* tp_setattro */
> > - NULL, /* tp_as_buffer */
> > - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
> > - "libxenlight connection", /* tp_doc */
> > - NULL, /* tp_traverse */
> > - NULL, /* tp_clear */
> > - NULL, /* tp_richcompare */
> > - 0, /* tp_weaklistoffset */
> > - NULL, /* tp_iter */
> > - NULL, /* tp_iternext */
> > - pyxl_methods, /* tp_methods */
> > - NULL, /* tp_members */
> > - NULL, /* tp_getset */
> > - NULL, /* tp_base */
> > - NULL, /* tp_dict */
> > - NULL, /* tp_descr_get */
> > - NULL, /* tp_descr_set */
> > - 0, /* tp_dictoffset */
> > - (initproc)PyXl_init, /* tp_init */
> > - NULL, /* tp_alloc */
> > - PyXl_new, /* tp_new */
> > -};
> > -
> > -static PyMethodDef xl_methods[] = { { NULL } };
> > -
> > -#define _INT_CONST(m, c) PyModule_AddIntConstant(m, #c, c)
> > -#define _INT_CONST_LIBXL(m, c) PyModule_AddIntConstant(m, #c, LIBXL_ ## c)
> > -PyMODINIT_FUNC initxl(void)
> > -{
> > - PyObject *m;
> > -
> > - if (PyType_Ready(&PyXlType) < 0)
> > - return;
> > -
> > - m = Py_InitModule(PKG, xl_methods);
> > -
> > - if (m == NULL)
> > - return;
> > -
> > - xl_error_obj = PyErr_NewException(PKG ".Error", PyExc_RuntimeError, NULL);
> > -
> > - Py_INCREF(&PyXlType);
> > - PyModule_AddObject(m, CLS, (PyObject *)&PyXlType);
> > -
> > - Py_INCREF(xl_error_obj);
> > - PyModule_AddObject(m, "Error", xl_error_obj);
> > -
> > - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_POWEROFF);
> > - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_REBOOT);
> > - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_SUSPEND);
> > - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_CRASH);
> > - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_WATCHDOG);
> > - _INT_CONST_LIBXL(m, SHUTDOWN_REASON_SOFT_RESET);
> > -
> > - genwrap__init(m);
> > -}
> > -
> > -
> > -/*
> > - * Local variables:
> > - * c-indent-level: 4
> > - * c-basic-offset: 4
> > - * End:
> > - */
> > --
> > 2.5.3
> >
> >
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@lists.xen.org
> > http://lists.xen.org/xen-devel
prev parent reply other threads:[~2015-10-06 18:09 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-06 16:57 [PATCH] tools/python: remove broken xl binding Wei Liu
2015-10-06 17:13 ` Andrew Cooper
2015-10-06 19:09 ` Konrad Rzeszutek Wilk
2015-10-08 14:40 ` Ian Campbell
2015-10-08 14:58 ` Zhigang Wang
2015-10-08 15:28 ` Ian Campbell
2015-10-08 16:10 ` Zhigang Wang
2015-10-23 13:51 ` Ian Campbell
2015-10-06 18:06 ` Konrad Rzeszutek Wilk
2015-10-06 18:09 ` Konrad Rzeszutek Wilk [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151006180913.GE11870@localhost.localdomain \
--to=konrad.wilk@oracle.com \
--cc=Ian.Jackson@eu.citrix.com \
--cc=andrew.cooper3@citrix.com \
--cc=ian.campbell@citrix.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xenproject.org \
--cc=zhigang.x.wang@oracle.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).