2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-21 03:33:59 +08:00
linux-next/drivers/virtio
Michael S. Tsirkin 1a93769399 virtio: new feature to detect IOMMU device quirk
The interaction between virtio and IOMMUs is messy.

On most systems with virtio, physical addresses match bus addresses,
and it doesn't particularly matter which one we use to program
the device.

On some systems, including Xen and any system with a physical device
that speaks virtio behind a physical IOMMU, we must program the IOMMU
for virtio DMA to work at all.

On other systems, including SPARC and PPC64, virtio-pci devices are
enumerated as though they are behind an IOMMU, but the virtio host
ignores the IOMMU, so we must either pretend that the IOMMU isn't
there or somehow map everything as the identity.

Add a feature bit to detect that quirk: VIRTIO_F_IOMMU_PLATFORM.

Any device with this feature bit set to 0 needs a quirk and has to be
passed physical addresses (as opposed to bus addresses) even though
the device is behind an IOMMU.

Note: it has to be a per-device quirk because for example, there could
be a mix of passed-through and virtual virtio devices. As another
example, some devices could be implemented by an out of process
hypervisor backend (in case of qemu vhost, or vhost-user) and so support
for an IOMMU needs to be coded up separately.

It would be cleanest to handle this in IOMMU core code, but that needs
per-device DMA ops. While we are waiting for that to be implemented, use
a work-around in virtio core.

Note: a "noiommu" feature is a quirk - add a wrapper to make
that clear.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2016-08-01 21:44:52 +03:00
..
config.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
Kconfig virtio_ring: Support DMA APIs 2016-03-02 17:01:57 +02:00
Makefile Add virtio-input driver. 2015-03-29 12:13:52 +10:30
virtio_balloon.c balloon: check the number of available pages in leak balloon 2016-08-01 21:44:51 +03:00
virtio_input.c virtio: make find_vqs() checkpatch.pl-friendly 2016-01-12 20:47:06 +02:00
virtio_mmio.c virtio_mmio: Use the DMA API if enabled 2016-03-02 17:01:58 +02:00
virtio_pci_common.c PCI changes for the v4.6 merge window: 2016-03-16 14:45:55 -07:00
virtio_pci_common.h virtio_pci: Use the DMA API if enabled 2016-03-02 17:01:58 +02:00
virtio_pci_legacy.c virtio_pci: Use the DMA API if enabled 2016-03-02 17:01:58 +02:00
virtio_pci_modern.c virtio: virtio 1.0 cs04 spec compliance for reset 2016-04-07 15:16:39 +03:00
virtio_ring.c virtio: new feature to detect IOMMU device quirk 2016-08-01 21:44:52 +03:00
virtio.c virtio: fix memory leak of virtio ida cache layers 2015-12-07 17:28:01 +02:00