qemu/hw/vfio
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 hw/vfio: Add CONFIG switches for calxeda-xgmac and amd-xgbe 2017-02-10 13:12:03 -07:00
amd-xgbe.c all: Clean up includes 2016-02-23 12:43:05 +00:00
calxeda-xgmac.c hw/vfio: Clean up includes 2016-01-29 15:07:24 +00:00
common.c memory: add section range info for IOMMU notifier 2017-04-20 15:22:41 -03:00
pci-quirks.c vfio/pci-quirks: Exclude non-ioport BAR from NVIDIA quirk 2017-04-06 16:03:26 -06:00
pci.c vfio/pci: Improve extended capability comments, skip masked caps 2017-02-22 13:19:58 -07:00
pci.h vfio/pci: Pass an error object to vfio_pci_igd_opregion_init 2016-10-17 10:57:59 -06:00
platform.c vfio/platform: Pass an error object to vfio_base_device_init 2016-10-17 10:58:01 -06:00
spapr.c memory: Replace skip_dump flag with "ram_device" 2016-10-31 09:53:03 -06:00
trace-events vfio: trace map/unmap for notify as well 2017-02-17 21:52:31 +02:00