On Mon, Aug 29, 2016 at 19:21:24 -0400, John Ferlan wrote:
...
> @@ -183,6 +183,10 @@
> <dd>
> The <code>mode</code> element contains a list of supported CPU
> models, each described by a dedicated <code>model</code>
element.
> + The <code>usable</code> attribute specifies whether the model
can
> + be used on the host. A special value <code>unknown</code> says
s/says/indicates/
Fixed.
> + libvirt does not have enough information to provide the
usability
> + data.
> </dd>
> </dl>
>
> diff --git a/docs/schemas/domaincaps.rng b/docs/schemas/domaincaps.rng
> index 9f3d225..5a605a7 100644
> --- a/docs/schemas/domaincaps.rng
> +++ b/docs/schemas/domaincaps.rng
> @@ -105,6 +105,13 @@
> <ref name='supported'/>
> <zeroOrMore>
> <element name='model'>
> + <attribute name='usable'>
> + <choice>
> + <value>yes</value>
> + <value>no</value>
> + <value>unknown</value>
> + </choice>
> + </attribute>
Why is this not optional? Hmm... Seems to be output only - still an odd
construct though. Not sure I have a better idea (yet).
Exactly, it's output only and we always format it so there's no reason
for the attribute to be optional.
...
> @@ -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.
...
> @@ -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