
[...]
@@ -399,7 +412,16 @@ virDomainCapsCPUFormat(virBufferPtr buf, virCPUModeTypeToString(VIR_CPU_MODE_CUSTOM)); if (cpu->custom && cpu->custom->count) { virBufferAddLit(buf, "supported='yes'>\n"); - virDomainCapsCPUCustomFormat(buf, cpu->custom); + virBufferAdjustIndent(buf, 2); + + virDomainCapsCPUCustomFormat(buf, cpu->custom, + VIR_DOMCAPS_CPU_USABLE_YES); + virDomainCapsCPUCustomFormat(buf, cpu->custom, + VIR_DOMCAPS_CPU_USABLE_NO); + virDomainCapsCPUCustomFormat(buf, cpu->custom, + VIR_DOMCAPS_CPU_USABLE_UNKNOWN);
So we're listing all the usable ones first, followed by the unusable, followed by the unknown. Hence the full.xml output change.
Hmm, it really seems pretty stupid to group them by usable value, doesn't it? I just fixed the code so that the CPU models are printed in a single loop no matter whether they're usable or not.
In any case, that seem like something that would be documentable - the sorting algorithm... It wasn't listed in the cover letter either (the usable attribute isn't there).
Hmm, you're right, I missed this in the cover letter.
I guess it just seems inefficient to run through the custom list 3 times just so we can print out in a specific/sorted order. Not sure what printing "unknown" really buys us - seems to be ignorable to me at least at this point in the review process.
For any hypervisor that doesn't give us the usability data, all CPUs will have usable='unknown'. Or were you thinking about why don't we just skip this attribute if it's value is unknown? If so, I think it's better to be explicit.
...
I suppose I was more grousing about the 3 times through, but then starting thinking is it worth it to print unknown, but since this is output only so I can agree it's fine to be explicit. Sorry if taking the route of ACK'ing every 10 or so patches is/was hard to work with - it's a large series and was not possible for me to review in one sitting, so I tried to break it up into more manageable chunks. In particular, this one I reviewed after 7PM (considering I typically am up/online by 6AM - that's a long day). It was mostly a workflow thing for me and I've seen other reviews take a similar approach with larger series. I should have also replied to the cover letter, but forgot. In any case, I think you've answered my issues so (more explicit) ACK for this one with the noted changes. John
@@ -2960,7 +2964,8 @@ virQEMUCapsLoadCache(virQEMUCapsPtr qemuCaps, const char *filename, }
if (virDomainCapsCPUModelsAddSteal(qemuCaps->cpuDefinitions, - &str) < 0) + &str, + VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)]
So we can go from 'yes' or 'no' to 'unknown' (for at least a short period of time). I guess I would have expected to "read" and use the cached data like other places... Leads me to wonder why it's being saved. Can it be possible to go from 'yes' to 'no' if we go through unknown? Guess it's just not clear what the dynamics of the conversion are and when is (should be) expected.
There's no code in QEMU driver which would set the value to anything but 'unknown' yet. There's no conversion involved. This is just a preparation for a later patch that would really ask QEMU for this stuff.
Jirka