xqemu/hw/virtio
Peter Xu 698feb5e13 memory: add section range info for IOMMU notifier
In this patch, IOMMUNotifier.{start|end} are introduced to store section
information for a specific notifier. When notification occurs, we not
only check the notification type (MAP|UNMAP), but also check whether the
notified iova range overlaps with the range of specific IOMMU notifier,
and skip those notifiers if not in the listened range.

When removing an region, we need to make sure we removed the correct
VFIOGuestIOMMU by checking the IOMMUNotifier.start address as well.

This patch is solving the problem that vfio-pci devices receive
duplicated UNMAP notification on x86 platform when vIOMMU is there. The
issue is that x86 IOMMU has a (0, 2^64-1) IOMMU region, which is
splitted by the (0xfee00000, 0xfeefffff) IRQ region. AFAIK
this (splitted IOMMU region) is only happening on x86.

This patch also helps vhost to leverage the new interface as well, so
that vhost won't get duplicated cache flushes. In that sense, it's an
slight performance improvement.

Suggested-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <1491562755-23867-2-git-send-email-peterx@redhat.com>
[ehabkost: included extra vhost_iommu_region_del() change from Peter Xu]
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
2017-04-20 15:22:41 -03:00
..
Makefile.objs stubs: move vhost stubs to stubs/vhost.o 2017-01-16 17:52:35 +01:00
trace-events balloon: Don't balloon roms 2017-01-10 07:02:52 +02:00
vhost-backend.c vhost_net: device IOTLB support 2017-01-18 22:59:53 +02:00
vhost-stub.c stubs: move vhost stubs to stubs/vhost.o 2017-01-16 17:52:35 +01:00
vhost-user.c vhost-user: Add MTU protocol feature and op 2017-01-10 07:02:53 +02:00
vhost-vsock.c virtio: cleanup VMSTATE_VIRTIO_DEVICE 2016-10-10 02:21:43 +03:00
vhost.c memory: add section range info for IOMMU notifier 2017-04-20 15:22:41 -03:00
virtio-balloon.c balloon: Don't balloon roms 2017-01-10 07:02:52 +02:00
virtio-bus.c virtio: Fix error handling in virtio_bus_device_plugged 2017-03-22 17:54:32 +02:00
virtio-crypto-pci.c virtio-crypto-pci: tag virtio-crypto device hot pluggable 2017-01-10 07:02:52 +02:00
virtio-crypto.c hw: Fix typos found by codespell 2017-01-24 23:26:52 +03:00
virtio-mmio.c virtio-mmio: switch to linux headers 2017-01-18 22:59:53 +02:00
virtio-pci.c hw/virtio: fix Power Management Control Register for PCI Express virtio devices 2017-03-16 01:46:41 +02:00
virtio-pci.h hw/virtio: fix Power Management Control Register for PCI Express virtio devices 2017-03-16 01:46:41 +02:00
virtio-rng.c virtio: cleanup VMSTATE_VIRTIO_DEVICE 2016-10-10 02:21:43 +03:00
virtio.c virtio: always use handle_aio_output if registered 2017-03-22 17:56:00 +02:00