qemu-e2k/include
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
..
block block: Drain BH in bdrv_drained_begin 2017-04-18 22:56:28 +08:00
crypto
disas Fix Thumb-1 BE32 execution and disassembly. 2017-02-07 18:29:59 +00:00
exec memory: add section range info for IOMMU notifier 2017-04-20 15:22:41 -03:00
fpu softfloat: Add float128_to_uint32_round_to_zero() 2017-02-22 11:28:28 +11:00
hw cadence_gem: Make the revision a property 2017-04-20 17:39:17 +01:00
io io: make qio_channel_yield aware of AioContexts 2017-02-21 11:14:07 +00:00
libdecnumber
migration postcopy: Use temporary for placing zero huge pages 2017-02-28 11:30:23 +00:00
monitor qmp: Dumb down how we run QMP command registration 2017-03-05 09:02:10 +01:00
net eth: Extend vlan stripping functions 2017-03-06 11:46:02 +08:00
qapi qapi: New qobject_input_visitor_new_str() for convenience 2017-03-07 16:07:47 +01:00
qemu coroutine: Extract qemu_aio_coroutine_enter 2017-04-11 20:07:15 +08:00
qom cpus: don't credit executed instructions before they have run 2017-04-10 10:23:38 +01:00
standard-headers update Linux headers to 4.11 2017-02-28 16:18:49 +00:00
sysemu block-backend: add drained_begin / drained_end ops 2017-03-22 13:26:27 -04:00
ui cirrus/vnc: zap bitblit support from console code. 2017-03-16 08:58:15 +01:00
elf.h nios2: Add usermode binaries emulation 2017-01-24 13:10:35 -08:00
glib-compat.h glib-compat: add g_test_add_data_func_full fallback 2017-03-01 00:09:28 +04:00
qemu-common.h Update copyright year 2017-02-28 09:03:39 +03:00
qemu-io.h hmp: Request permissions in qemu-io 2017-02-28 20:47:50 +01:00
trace-tcg.h