The algorithm that matches data from query-cpus and query-hotpluggable-cpus is quite complex. Start using descriptive iterator names to avoid confusion. --- src/qemu/qemu_monitor.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 1fdee3a..b8da637 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -1772,6 +1772,7 @@ qemuMonitorGetCPUInfoHotplug(struct qemuMonitorQueryHotpluggableCpusEntry *hotpl char *tmp; int order = 1; size_t totalvcpus = 0; + size_t mastervcpu; /* this iterator is used for iterating hotpluggable entities */ size_t i; size_t j; @@ -1812,19 +1813,19 @@ qemuMonitorGetCPUInfoHotplug(struct qemuMonitorQueryHotpluggableCpusEntry *hotpl /* transfer appropriate data from the hotpluggable list to corresponding * entries. the entries returned by qemu may in fact describe multiple * logical vcpus in the guest */ - j = 0; + mastervcpu = 0; for (i = 0; i < nhotplugvcpus; i++) { - vcpus[j].socket_id = hotplugvcpus[i].socket_id; - vcpus[j].core_id = hotplugvcpus[i].core_id; - vcpus[j].thread_id = hotplugvcpus[i].thread_id; - vcpus[j].vcpus = hotplugvcpus[i].vcpus; - VIR_STEAL_PTR(vcpus[j].qom_path, hotplugvcpus[i].qom_path); - VIR_STEAL_PTR(vcpus[j].alias, hotplugvcpus[i].alias); - VIR_STEAL_PTR(vcpus[j].type, hotplugvcpus[i].type); - vcpus[j].id = hotplugvcpus[i].enable_id; - - /* skip over vcpu entries covered by this hotpluggable entry */ - j += hotplugvcpus[i].vcpus; + vcpus[mastervcpu].socket_id = hotplugvcpus[i].socket_id; + vcpus[mastervcpu].core_id = hotplugvcpus[i].core_id; + vcpus[mastervcpu].thread_id = hotplugvcpus[i].thread_id; + vcpus[mastervcpu].vcpus = hotplugvcpus[i].vcpus; + VIR_STEAL_PTR(vcpus[mastervcpu].qom_path, hotplugvcpus[i].qom_path); + VIR_STEAL_PTR(vcpus[mastervcpu].alias, hotplugvcpus[i].alias); + VIR_STEAL_PTR(vcpus[mastervcpu].type, hotplugvcpus[i].type); + vcpus[mastervcpu].id = hotplugvcpus[i].enable_id; + + /* calculate next master vcpu (hotpluggable unit) entry */ + mastervcpu += hotplugvcpus[i].vcpus; } /* match entries from query cpus to the output array taking into account -- 2.10.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list