(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