On 08/19/2016 02:33 PM, John Ferlan wrote: > > [...] >> +/** >> + * qemuMonitorGetCPUInfoHotplug: >> + * >> + * This function stitches together data retrieved via query-hotpluggable-cpus >> + * which returns entities on the hotpluggable level (which may describe more >> + * than one guest logical vcpu) with the output of query-cpus, having an entry >> + * per enabled guest logical vcpu. >> + * >> + * query-hotpluggable-cpus conveys following information: >> + * - topology information and number of logical vcpus this entry creates >> + * - device type name of the entry that needs to be used when hotplugging >> + * - qom path in qemu which can be used to map the entry against query-cpus >> + * >> + * query-cpus conveys following information: >> + * - thread id of a given guest logical vcpu >> + * - order in which the vcpus were inserted >> + * - qom path to allow mapping the two together >> + * >> + * The libvirt's internal structure has an entry for each possible (even >> + * disabled) guest vcpu. The purpose is to map the data together so that we are >> + * certain of the thread id mapping and the information required for vcpu >> + * hotplug. >> + * >> + * This function returns 0 on success and -1 on error, but does not report >> + * libvirt errors so that fallback approach can be used. >> + */ >> +static int >> +qemuMonitorGetCPUInfoHotplug(struct qemuMonitorQueryHotpluggableCpusEntry *hotplugvcpus, >> + size_t nhotplugvcpus, >> + struct qemuMonitorQueryCpusEntry *cpuentries, >> + size_t ncpuentries, >> + qemuMonitorCPUInfoPtr vcpus, >> + size_t maxvcpus) >> +{ >> + int order = 1; >> + size_t totalvcpus = 0; >> + size_t i; >> + size_t j; >> + >> + /* ensure that the total vcpu count reported by query-hotpluggable-cpus equals >> + * to the libvirt maximum cpu count */ >> + for (i = 0; i < nhotplugvcpus; i++) >> + totalvcpus += hotplugvcpus[i].vcpus; >> + >> + if (totalvcpus != maxvcpus) { >> + VIR_DEBUG("expected '%zu' total vcpus got '%zu'", maxvcpus, totalvcpus); >> + return -1; >> + } > > Still trying to come to grips with 'nhotplugvcpus', 'ncpuentries', and > 'maxvcpus' > >> + >> + /* Note the order in which the hotpluggable entities are inserted by >> + * matching them to the query-cpus entries */ >> + for (i = 0; i < ncpuentries; i++) { >> + for (j = 0; j < nhotplugvcpus; j++) { >> + if (!cpuentries[i].qom_path || >> + !hotplugvcpus[j].qom_path || >> + !STRPREFIX(cpuentries[i].qom_path, hotplugvcpus[j].qom_path)) >> + continue; >> + >> + /* add ordering info for hotpluggable entries */ >> + if (hotplugvcpus[j].enable_id == 0) >> + hotplugvcpus[j].enable_id = order++; >> + >> + break; > > So enable_id always == 1 (or 0 I supposed) and order never gets beyond > 2? Or am I missing something not obvious. > UGH - face palm Friday... break the inner loop. John > I guess I thought you were trying to figure out the order of > nhotplugvcpus so that you could fill in vcpus in the correct order, but > that doesn't match the subsequent algorithm. > > John >> + } >> + } >> + [...] -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list