diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index a4026ca7bd..90dbabd76d 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -16815,16 +16815,17 @@ virDomainPinAdd(virDomainPinDefPtr **pindef_list, } void -virDomainVcpuPinDel(virDomainDefPtr def, int vcpu) +virDomainPinDel(virDomainPinDefPtr **pindef_list, + size_t *npin, + int id) { int n; - virDomainPinDefPtr *vcpupin_list = def->cputune.vcpupin; - for (n = 0; n < def->cputune.nvcpupin; n++) { - if (vcpupin_list[n]->id == vcpu) { - virBitmapFree(vcpupin_list[n]->cpumask); - VIR_FREE(vcpupin_list[n]); - VIR_DELETE_ELEMENT(def->cputune.vcpupin, n, def->cputune.nvcpupin); + for (n = 0; n < *npin; n++) { + if ((*pindef_list)[n]->id == id) { + virBitmapFree((*pindef_list)[n]->cpumask); + VIR_FREE((*pindef_list)[n]); + VIR_DELETE_ELEMENT(*pindef_list, n, *npin); return; } } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 49d83a226f..3b32c8d5b2 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2563,7 +2563,9 @@ int virDomainPinAdd(virDomainPinDefPtr **pindef_list, int maplen, int id); -void virDomainVcpuPinDel(virDomainDefPtr def, int vcpu); +void virDomainPinDel(virDomainPinDefPtr **pindef_list, + size_t *npin, + int vcpu); int virDomainEmulatorPinAdd(virDomainDefPtr def, unsigned char *cpumap, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 9fe766ad6b..adbdece076 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -387,6 +387,7 @@ virDomainPinAdd; virDomainPinDefArrayFree; virDomainPinDefCopy; virDomainPinDefFree; +virDomainPinDel; virDomainPinFind; virDomainPinIsDuplicate; virDomainPMSuspendedReasonTypeFromString; @@ -440,7 +441,6 @@ virDomainTPMBackendTypeToString; virDomainTPMDefFree; virDomainTPMModelTypeFromString; virDomainTPMModelTypeToString; -virDomainVcpuPinDel; virDomainVideoDefaultRAM; virDomainVideoDefaultType; virDomainVideoDefFree; diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 45dd385f9b..e555ca4f5a 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -1990,7 +1990,9 @@ libxlDomainPinVcpuFlags(virDomainPtr dom, unsigned int vcpu, /* full bitmap means reset the settings (if any). */ if (virBitmapIsAllSet(pcpumap)) { - virDomainVcpuPinDel(targetDef, vcpu); + virDomainPinDel(&targetDef->cputune.vcpupin, + &targetDef->cputune.nvcpupin, + vcpu); goto done; } diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 5c8d75b3d1..149963f056 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4801,7 +4801,9 @@ static int qemuDomainHotplugVcpus(virQEMUDriverPtr driver, } /* Free vcpupin setting */ - virDomainVcpuPinDel(vm->def, i); + virDomainPinDel(&vm->def->cputune.vcpupin, + &vm->def->cputune.nvcpupin, + i); } } @@ -4983,7 +4985,9 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, /* remove vcpupin entries for vcpus that were unplugged */ if (nvcpus < persistentDef->vcpus) { for (i = persistentDef->vcpus; i >= nvcpus; i--) - virDomainVcpuPinDel(persistentDef, i); + virDomainPinDel(&persistentDef->cputune.vcpupin, + &persistentDef->cputune.nvcpupin, + i); } if (maximum) { @@ -5151,7 +5155,9 @@ qemuDomainPinVcpuFlags(virDomainPtr dom, } if (doReset) { - virDomainVcpuPinDel(vm->def, vcpu); + virDomainPinDel(&vm->def->cputune.vcpupin, + &vm->def->cputune.nvcpupin, + vcpu); } else { if (vm->def->cputune.vcpupin) virDomainPinDefArrayFree(vm->def->cputune.vcpupin, @@ -5181,7 +5187,9 @@ qemuDomainPinVcpuFlags(virDomainPtr dom, if (flags & VIR_DOMAIN_AFFECT_CONFIG) { if (doReset) { - virDomainVcpuPinDel(persistentDef, vcpu); + virDomainPinDel(&persistentDef->cputune.vcpupin, + &persistentDef->cputune.nvcpupin, + vcpu); } else { if (!persistentDef->cputune.vcpupin) { if (VIR_ALLOC(persistentDef->cputune.vcpupin) < 0)