
On 02/24/2016 09:22 AM, Peter Krempa wrote:
The implementation of the inner guts of the function is similar for all drivers, so we can add a helper and not have to reimplement it three times. --- src/conf/domain_conf.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 8 ++++++ src/libvirt_private.syms | 1 + src/libxl/libxl_driver.c | 38 +++------------------------- src/qemu/qemu_driver.c | 43 +++----------------------------- src/test/test_driver.c | 38 ++++------------------------ 6 files changed, 84 insertions(+), 108 deletions(-)
ACK with one nit... One difference I noted, the 'libxl' code would: memset(cpumaps, 0x00, maplen * ncpumaps); just before filling. Should that be replicated in the common code? If not then for the libxl code should the lines be kept? John [...]
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 404016e..a99c99c 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -2423,8 +2423,7 @@ libxlDomainGetVcpuPinInfo(virDomainPtr dom, int ncpumaps, libxlDriverConfigPtr cfg = libxlDriverConfigGet(driver); virDomainObjPtr vm = NULL; virDomainDefPtr targetDef = NULL; - int hostcpus, vcpu, ret = -1; - virBitmapPtr allcpumap = NULL; + int ret = -1;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1); @@ -2445,41 +2444,10 @@ libxlDomainGetVcpuPinInfo(virDomainPtr dom, int ncpumaps, /* Make sure coverity knows targetDef is valid at this point. */ sa_assert(targetDef);
- /* Clamp to actual number of vcpus */ - if (ncpumaps > virDomainDefGetVcpus(targetDef)) - ncpumaps = virDomainDefGetVcpus(targetDef); - - if ((hostcpus = libxl_get_max_cpus(cfg->ctx)) < 0) - goto cleanup; - - if (!(allcpumap = virBitmapNew(hostcpus))) - goto cleanup; - - virBitmapSetAll(allcpumap); - - memset(cpumaps, 0x00, maplen * ncpumaps);
^^^^^
- - for (vcpu = 0; vcpu < ncpumaps; vcpu++) { - virDomainVcpuInfoPtr vcpuinfo = virDomainDefGetVcpu(targetDef, vcpu); - virBitmapPtr bitmap = NULL; - - if (!vcpuinfo->online) - continue; - - if (vcpuinfo->cpumask) - bitmap = vcpuinfo->cpumask; - else if (targetDef->cpumask) - bitmap = targetDef->cpumask; - else - bitmap = allcpumap; - - virBitmapToDataBuf(bitmap, VIR_GET_CPUMAP(cpumaps, maplen, vcpu), maplen); - } - - ret = ncpumaps; + ret = virDomainDefGetVcpuPinInfoHelper(targetDef, maplen, ncpumaps, cpumaps, + libxl_get_max_cpus(cfg->ctx), NULL);
cleanup: - virBitmapFree(allcpumap); if (vm) virObjectUnlock(vm); virObjectUnref(cfg);
[...]