
On Fri, Sep 30, 2016 at 09:00:15AM +0200, Jiri Denemark wrote:
On Thu, Sep 29, 2016 at 15:51:58 -0300, Eduardo Habkost wrote:
On Thu, Sep 29, 2016 at 04:21:07PM +0200, Jiri Denemark wrote: [...]
Slightly related, I don't think we have a way to list CPU features supported by QEMU over QMP, do we? "-cpu ?" will show them all, but I couldn't find a QMP command that would give me the same list.
device-list-properties should return all the properties you can set. But I recommend that you don't make libvirt set any of the properties in the list unless: 1) you know what it does; or 2) it is returned by a query-cpu-model-expansion call.
The use case was for pre-checking whether all CPU features specified in domain XML are supported by current QEMU binary. What parameters would I need to use for device-list-properties? And would it work with -machine none?
You just need the right QOM type name (in x86 it is "<model>-x86_64-cpu" or "<model>-i386-cpu"). I will send a patch that includes a "qom-type" field in CpuDefinitionInfo (query-cpu-definitions) so you know what's the right QOM type name to query.
Hmm, it doesn't seem to work (I tried both -machine none and -machine pc):
(QEMU) device-list-properties typename=SandyBridge-x86_64-cpu {"error": {"class": "GenericError", "desc": "Can't list properties of device 'SandyBridge-x86_64-cpu'"}}
Oops, we need to remove cannot_destroy_with_object_finalize_yet from the CPU classes, and then this will work.
Anyway, is the list of properties expected to depend on the CPU model? If not, wouldn't a simple query-cpu-properties returning a list of properties QEMU understands be good enough? The list would be pretty similar to what -cpu ? returns. It would help us provide a better error in case a user asks for a CPU features that is not supported by their QEMU binary, and it would also help us translate the result of query-cpu-model-expansion; as you probably know, we use older spellings for some CPU features (e.g., pclmulqdq vs. pclmuldq).
I see. I will check if I can fit this information inside query-command-line-options.
I think device-list-properties won't work with an abstract base type like "x86_64-cpu" or "i386-cpu".
Right:
(QEMU) device-list-properties typename=x86_64-cpu {"error": {"class": "GenericError", "desc": "Parameter 'name' expects non-abstract device type"}}
But I think it's better query the right class name for the CPU model you plan to use, anyway (this way architecture code will be able to have different CPU models supporting different sets of options, if necessary).
I see, this make sense. Although a generic query-cpu-properties would still be useful for giving us the translation table between new and old features names.
If we add the aliases for old names like you sugested on qemu-devel, the old names should be available in the QOM queries, too. If we fix device-list-properties to work with abstract types and add the old names to the QOM property list as aliases (both things we should do eventually, anyway), then a specific query-cpu-properties or query-command-line-options support may be unnecessary. -- Eduardo