[libvirt] [PATCH v2] qemu: fix command line building for iommu devices

Daniel P. Berrange berrange at redhat.com
Mon Oct 3 15:39:23 UTC 2016


On Mon, Oct 03, 2016 at 05:18:40PM +0200, Ján Tomko wrote:
> On Mon, Oct 03, 2016 at 02:37:57PM +0100, Daniel P. Berrange wrote:
> > The intel-iommu device has existed since QEMU 2.2.0, but
> > it was only possible to create it with -device since
> > QEMU 2.7.0, thanks to:
> > 
> >  commit 621d983a1f9051f4cfc3f402569b46b77d8449fc
> >  Author: Marcel Apfelbaum <marcel at redhat.com>
> >  Date:   Mon Jun 27 18:38:34 2016 +0300
> > 
> >    hw/iommu: enable iommu with -device
> > 
> >    Use the standard '-device intel-iommu' to create the IOMMU device.
> >    The legacy '-machine,iommu=on' can still be used.
> > 
> > The libvirt capability check & command line formatting code
> > is thus broken for all QEMU versions 2.2.0 -> 2.6.0 inclusive.
> > 
> > This fixes it to use iommu=on instead.
> > 
> > Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> > ---
> > src/qemu/qemu_capabilities.c                       | 13 ++++++++
> > src/qemu/qemu_capabilities.h                       |  3 ++
> > src/qemu/qemu_command.c                            | 22 +++++++++++++
> > tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml   |  2 +-
> > tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml   |  2 +-
> > tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml   |  2 +-
> > tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml   |  2 +-
> > .../qemuxml2argv-intel-iommu-machine.args          | 21 ++++++++++++
> > .../qemuxml2argv-intel-iommu-machine.xml           | 37 ++++++++++++++++++++++
> > tests/qemuxml2argvtest.c                           |  2 ++
> > 10 files changed, 102 insertions(+), 4 deletions(-)
> > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-machine.args
> > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-machine.xml
> > 
> 
> This patch won't apply for me:
> Applying: qemu: fix command line building for iommu devices
> error: src/qemu/qemu_capabilities.c: does not match index
> error: patch failed: src/qemu/qemu_capabilities.h:376
> error: src/qemu/qemu_capabilities.h: patch does not apply
> error: patch failed:
> tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml:190
> error: tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml: patch does not
> apply
> Patch failed at 0001 qemu: fix command line building for iommu devices

Opps, I based it on the wrong branch - libvirt 2.2.0 instead of master

> 
> > @@ -3633,6 +3635,17 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps,
> >     if (virQEMUCapsProbeQMPMigrationCapabilities(qemuCaps, mon) < 0)
> >         goto cleanup;
> > 
> > +    /* 'intel-iommu' shows up as a device since 2.2.0, but can
> > +     * not be used with -device until 2.7.0. Before that it
> > +     * requires -machine iommu=on. So we must clear the device
> > +     * capability we detected on older QEMUs
> > +     */
> > +    if (qemuCaps->version < 2007000 &&
> > +        virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_INTEL_IOMMU)) {
> > +        virQEMUCapsClear(qemuCaps, QEMU_CAPS_DEVICE_INTEL_IOMMU);
> > +        virQEMUCapsSet(qemuCaps, QEMU_CAPS_MACHINE_IOMMU);
> 
> Works for upstream QEMU, but not for distros that have backported the
> fix.

That's only a problem for distros that backported the patch
that *removes* the iommu attribute against -machine. If distros
backport code that removes features, then its their responsibility
to fix their downstream libvirt too.

> > diff --git a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
> > index 7a54040..b8b79ab 100644
> > --- a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
> > +++ b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
> > @@ -190,10 +190,10 @@
> >   <flag name='drive-detect-zeroes'/>
> >   <flag name='tls-creds-x509'/>
> >   <flag name='display'/>
> > -  <flag name='intel-iommu'/>
> 
> Strange. For 2.7.0 we should have kept the original capability,
> according to the code above.

Opps, yes, that's not right.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://entangle-photo.org       -o-    http://search.cpan.org/~danberr/ :|




More information about the libvir-list mailing list