From 18a68f7dce7d74f63ca313ed6da4cc40a8be4fcb Mon Sep 17 00:00:00 2001 From: Taku Izumi Date: Mon, 25 Jul 2011 15:00:11 +0800 Subject: [PATCH] python: add Python binding for virDomainPinVcpusFlags API This patch adds the Python bindings for virDomainPinVcpuFlags API. * python/generator.py: add it to the generator skip list * python/libvirt-override-api.xml: provide override description * python/libvirt-override.c: provide override bindings implementation --- python/generator.py | 1 + python/libvirt-override-api.xml | 8 ++++++ python/libvirt-override.c | 48 +++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) diff --git a/python/generator.py b/python/generator.py index d0d3ae6e84..672b38f725 100755 --- a/python/generator.py +++ b/python/generator.py @@ -344,6 +344,7 @@ skip_impl = ( 'virDomainGetMemoryParameters', 'virDomainGetVcpus', 'virDomainPinVcpu', + 'virDomainPinVcpuFlags', 'virSecretGetValue', 'virSecretSetValue', 'virSecretGetUUID', diff --git a/python/libvirt-override-api.xml b/python/libvirt-override-api.xml index 0dca045eb1..4d9f54b556 100644 --- a/python/libvirt-override-api.xml +++ b/python/libvirt-override-api.xml @@ -174,6 +174,14 @@ + + Dynamically change the real CPUs which can be allocated to a virtual CPU. This function requires privileged access to the hypervisor. + + + + + + Change the scheduler parameters diff --git a/python/libvirt-override.c b/python/libvirt-override.c index 22c4d1de65..678840e0ed 100644 --- a/python/libvirt-override.c +++ b/python/libvirt-override.c @@ -736,6 +736,53 @@ libvirt_virDomainPinVcpu(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_INT_SUCCESS; } +static PyObject * +libvirt_virDomainPinVcpuFlags(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) { + virDomainPtr domain; + PyObject *pyobj_domain, *pycpumap, *truth; + virNodeInfo nodeinfo; + unsigned char *cpumap; + int cpumaplen, i, vcpu; + unsigned int flags; + int i_retval; + + if (!PyArg_ParseTuple(args, (char *)"OiOi:virDomainPinVcpuFlags", + &pyobj_domain, &vcpu, &pycpumap, &flags)) + return(NULL); + domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); + + LIBVIRT_BEGIN_ALLOW_THREADS; + i_retval = virNodeGetInfo(virDomainGetConnect(domain), &nodeinfo); + LIBVIRT_END_ALLOW_THREADS; + if (i_retval < 0) + return VIR_PY_INT_FAIL; + + cpumaplen = VIR_CPU_MAPLEN(VIR_NODEINFO_MAXCPUS(nodeinfo)); + if ((cpumap = malloc(cpumaplen)) == NULL) + return VIR_PY_INT_FAIL; + memset(cpumap, 0, cpumaplen); + + truth = PyBool_FromLong(1); + for (i = 0 ; i < VIR_NODEINFO_MAXCPUS(nodeinfo) ; i++) { + PyObject *flag = PyTuple_GetItem(pycpumap, i); + if (flag == truth) + VIR_USE_CPU(cpumap, i); + else + VIR_UNUSE_CPU(cpumap, i); + } + + LIBVIRT_BEGIN_ALLOW_THREADS; + i_retval = virDomainPinVcpuFlags(domain, vcpu, cpumap, cpumaplen, flags); + LIBVIRT_END_ALLOW_THREADS; + Py_DECREF(truth); + free(cpumap); + + if (i_retval < 0) + return VIR_PY_INT_FAIL; + + return VIR_PY_INT_SUCCESS; +} /************************************************************************ * * @@ -4109,6 +4156,7 @@ static PyMethodDef libvirtMethods[] = { {(char *) "virDomainGetMemoryParameters", libvirt_virDomainGetMemoryParameters, METH_VARARGS, NULL}, {(char *) "virDomainGetVcpus", libvirt_virDomainGetVcpus, METH_VARARGS, NULL}, {(char *) "virDomainPinVcpu", libvirt_virDomainPinVcpu, METH_VARARGS, NULL}, + {(char *) "virDomainPinVcpuFlags", libvirt_virDomainPinVcpuFlags, METH_VARARGS, NULL}, {(char *) "virConnectListStoragePools", libvirt_virConnectListStoragePools, METH_VARARGS, NULL}, {(char *) "virConnectListDefinedStoragePools", libvirt_virConnectListDefinedStoragePools, METH_VARARGS, NULL}, {(char *) "virStoragePoolGetAutostart", libvirt_virStoragePoolGetAutostart, METH_VARARGS, NULL}, -- GitLab