
(CCing qemu-devel and the QAPI maintainers. I have a question about introspection below.) On Sat, Jun 17, 2017 at 11:48:10AM -0400, Laine Stump wrote: [...]
+ /* Support for busy polling on vhost-net devices ("-netdev + * tap,...,poll-us=n") */ + if (qemuCaps->version >= 2007000) + virQEMUCapsSet(qemuCaps, QEMU_CAPS_VHOST_NET_POLL_US); +
Enabling a capability based purely on the qemu binary version is something that's only done as a last resort if it can't be determined by QMP probes. This is because the version number is an inaccurate indicator - it often happens that a new capability is added to upstream in qemu version "Y", but then that feature is backported to qemu version "X" in some downstream distro package; if we based the capability on version number, then libvirt wouldn't take advantage of the feature even though qemu had it.
What *should* get us the info we need is to add a table entry to virQEMUCapsCommandLine to check whether or not the poll-us option exists in the current qemu binary. Something like this:
static struct virQEMUCapsCommandLineProps virQEMUCapsCommandLine[] = { ... { "netdev", "poll-us", QEMU_CAPS_NETDEV_POLL_US },
Unfortunately when I add that and regenerate the .replies file for qemu 2.9.0 (with the command "tests/qemucapsprobe /usr/bin/qemu-system-x86_64"), this is the info it finds for netdev:
{ "parameters": [ ], "option": "netdev" },
My understanding was that the possible parameters to the netdev commandline option should be listed, but instead the parameters list is empty :-/.
Maybe Eduardo can help me understand why the parameters are empty, and (more importantly) what needs to be done to get the supported parameters for -netdev - basically we need to know what are the available parameters to "-netdev tap,...". I hope we don't end up needing to base the check purely on qemu version.
query-command-line-options is incomplete and useless on many cases (including but not limited to -device, -object, and -netdev). It is not capable to model cases where the set of accepted options depends on a discriminator option (e.g. a "driver" or "type" option). Fortunately, netdev options are modelled in the QAPI schema as union Netdev. However, 'query-qmp-schema' doesn't seem to include union Netdev because it is not referenced by any QMP command or event. Markus, Eric, Michael: is there any way libvirt can query the definition of union Netdev from the schema with current QEMU? -- Eduardo