
On 05/13/2016 09:47 AM, Andrea Bolognani wrote:
We already do this when parsing the help string (QEMU versions between 0.12.0 and 1.2.0), but not when using QMP.
Stop checking the QMP data, and enable it unconditionally even when using QMP instead.
The QMP check was never accurate anyway, since it was based on the availability of the 'rombar' property for the {kvm-}pci-assign device, ignoring the fact that the same property exists and can be used for devices such as virtio-net-pci.
Since a few other capabilities are enabled based on a version check, but the version in question is older than 0.12.0, move those to a new virQEMUCapsInitHelpBasic() function and get rid of the version checks altogether. --- src/qemu/qemu_capabilities.c | 46 ++++++++++++---------- tests/qemucapabilitiesdata/caps_1.2.2-1.x86_64.xml | 1 + .../qemucapabilitiesdata/caps_2.6.0-1.aarch64.xml | 1 + .../qemucapabilitiesdata/caps_2.6.0-1.ppc64le.xml | 1 + .../qemucapabilitiesdata/caps_2.6.0-2.aarch64.xml | 1 + 5 files changed, 30 insertions(+), 20 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 1bddf43..a6cce30 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1110,6 +1110,29 @@ virCapsPtr virQEMUCapsInit(virQEMUCapsCachePtr cache) }
+/* Capabilities that we assume are always enabled + * for QEMU >= 0.12.0 */ +static void +virQEMUCapsInitHelpBasic(virQEMUCapsPtr qemuCaps) +{ + + /* Although very new versions of qemu advertise the presence of + * the rombar option in the output of "qemu -device pci-assign,?", + * this advertisement was added to the code long after the option + * itself. According to qemu developers, though, rombar is + * available in all qemu binaries from release 0.12 onward. + * Setting the capability this way makes it available in more + * cases where it might be needed, and shouldn't cause any false + * positives (in the case that it did, qemu would produce an error + * log and refuse to start, so it would be immediately obvious). + */ + virQEMUCapsSet(qemuCaps, QEMU_CAPS_PCI_ROMBAR); + + virQEMUCapsSet(qemuCaps, QEMU_CAPS_VIRTIO_BLK_SG_IO); + virQEMUCapsSet(qemuCaps, QEMU_CAPS_CPU_HOST); +}
As Pavel said, the approach we've taken for other flags is to rename them to X_$NAME, and remove all code usages. Moving these flags to their own function confuses that approach, so I suggest either give the X_$NAME treatment to each of those flags, or just using this series to disable PCI_ROMBAR and leave the other flags for a later series. (FWIW there's a list of features needing similar treatment on the BiteSizedTasks page: http://wiki.libvirt.org/page/BiteSizedTasks#Remove_unused_QEMU_feature_flags ) - Cole