From df55ed4bc0b27de589d6b5d8d8cb5110f353d9f5 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Fri, 22 May 2015 10:20:55 +0200 Subject: [PATCH] libxl: Unbreak vcpu pinning Libxl's vcpu pinning would work only if the vcpu array was ordered and was not sparse. Remove the condition and iterate the pinning array properly. --- src/libxl/libxl_domain.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index 25e63191a..f339d9c5b 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -794,24 +794,22 @@ int libxlDomainSetVcpuAffinities(libxlDriverPrivatePtr driver, virDomainObjPtr vm) { libxlDriverConfigPtr cfg = libxlDriverConfigGet(driver); - virDomainDefPtr def = vm->def; + virDomainPinDefPtr pin; libxl_bitmap map; virBitmapPtr cpumask = NULL; - int vcpu; + size_t i; int ret = -1; - for (vcpu = 0; vcpu < def->cputune.nvcpupin; ++vcpu) { - if (vcpu != def->cputune.vcpupin[vcpu]->id) - continue; - - cpumask = def->cputune.vcpupin[vcpu]->cpumask; + for (i = 0; i < vm->def->cputune.nvcpupin; ++i) { + pin = vm->def->cputune.vcpupin[i]; + cpumask = pin->cpumask; if (virBitmapToData(cpumask, &map.map, (int *)&map.size) < 0) goto cleanup; - if (libxl_set_vcpuaffinity(cfg->ctx, def->id, vcpu, &map) != 0) { + if (libxl_set_vcpuaffinity(cfg->ctx, vm->def->id, pin->id, &map) != 0) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("Failed to pin vcpu '%d' with libxenlight"), vcpu); + _("Failed to pin vcpu '%d' with libxenlight"), pin->id); goto cleanup; } -- 2.39.5