From 5ed97c22865c86ccca3802d24c9893dd1109ab34 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 17 Mar 2020 18:33:31 +0100 Subject: [PATCH] qemuDomainVcpuValidateConfig: Properly initialize 'firstcpu' variable The loop which checks whether the vcpus are in proper configuration for the requested hot(un)plug skips the first modified vcpu. This means that 'firstvcpu' which is used to print the error message in case the configuration is not suitable would never point to the first modified vcpu. In cases such as: 8 # virsh setvcpu --config --disable upstream 1 error: invalid argument: vcpu '-1' can't be modified as it is followed by non-hotpluggable online vcpus After this fix the proper vcpu is reported in the error message: # virsh setvcpu --config --disable upstream 1 error: invalid argument: vcpu '1' can't be modified as it is followed by non-hotpluggable online vcpu https://bugzilla.redhat.com/show_bug.cgi?id=1611061 Signed-off-by: Peter Krempa Reviewed-by: Daniel Henrique Barboza --- src/qemu/qemu_hotplug.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 47069be900..a76df64a7b 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -6478,18 +6478,16 @@ qemuDomainVcpuValidateConfig(virDomainDefPtr def, return -1; } + firstvcpu = virBitmapNextSetBit(map, -1); + /* non-hotpluggable vcpus need to stay clustered starting from vcpu 0 */ - for (next = virBitmapNextSetBit(map, -1) + 1; next < maxvcpus; next++) { + for (next = firstvcpu + 1; next < maxvcpus; next++) { if (!(vcpu = virDomainDefGetVcpu(def, next))) continue; /* skip vcpus being modified */ - if (virBitmapIsBitSet(map, next)) { - if (firstvcpu < 0) - firstvcpu = next; - + if (virBitmapIsBitSet(map, next)) continue; - } if (vcpu->online && vcpu->hotpluggable == VIR_TRISTATE_BOOL_NO) { virReportError(VIR_ERR_INVALID_ARG, -- GitLab