qemu/include/exec
David Gibson a788f227ef memory: Allow replay of IOMMU mapping notifications
When we have guest visible IOMMUs, we allow notifiers to be registered
which will be informed of all changes to IOMMU mappings.  This is used by
vfio to keep the host IOMMU mappings in sync with guest IOMMU mappings.

However, unlike with a memory region listener, an iommu notifier won't be
told about any mappings which already exist in the (guest) IOMMU at the
time it is registered.  This can cause problems if hotplugging a VFIO
device onto a guest bus which had existing guest IOMMU mappings, but didn't
previously have an VFIO devices (and hence no host IOMMU mappings).

This adds a memory_region_iommu_replay() function to handle this case.  It
replays any existing mappings in an IOMMU memory region to a specified
notifier.  Because the IOMMU memory region doesn't internally remember the
granularity of the guest IOMMU it has a small hack where the caller must
specify a granularity at which to replay mappings.

If there are finer mappings in the guest IOMMU these will be reported in
the iotlb structures passed to the notifier which it must handle (probably
causing it to flag an error).  This isn't new - the VFIO iommu notifier
must already handle notifications about guest IOMMU mappings too short
for it to represent in the host IOMMU.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Laurent Vivier <lvivier@redhat.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
2015-10-05 12:39:03 -06:00
..
user linux-user: Allocate thunk size dynamically 2015-06-15 11:36:58 +03:00
address-spaces.h exec: move include files to include/exec/ 2012-12-19 08:31:31 +01:00
cpu-all.h Move RAMBlock and ram_list to ram_addr.h 2015-09-09 15:34:54 +02:00
cpu-common.h Stop including qemu-common.h in memory.h 2015-07-06 14:59:09 +02:00
cpu-defs.h cpu_defs: Simplify CPUTLB padding logic 2015-08-06 12:04:08 +02:00
cpu_ldst.h softmmu: remove now unused functions 2015-09-11 08:16:05 -07:00
cpu_ldst_template.h softmmu: add helper function to pass through retaddr 2015-09-11 08:15:32 -07:00
cpu_ldst_useronly_template.h softmmu: add helper function to pass through retaddr 2015-09-11 08:15:32 -07:00
cputlb.h include/exec: Move cputlb exec.c defs out 2015-09-16 17:33:33 +02:00
exec-all.h include/exec: Move cputlb exec.c defs out 2015-09-16 17:33:33 +02:00
gdbstub.h gdbstub: Implement gdb_do_syscallv() 2015-09-07 10:39:27 +01:00
gen-icount.h tcg: Change translator-side labels to a pointer 2015-03-13 12:28:18 -07:00
helper-gen.h trace: [tcg] Include TCG-tracing helpers 2014-08-12 14:26:12 +01:00
helper-head.h tcg: Move size effects out of dh_arg 2014-05-28 09:33:55 -07:00
helper-proto.h trace: [tcg] Include TCG-tracing helpers 2014-08-12 14:26:12 +01:00
helper-tcg.h trace: [tcg] Include TCG-tracing helpers 2014-08-12 14:26:12 +01:00
hwaddr.h hwaddr: Make hwaddr type usable beyond softmmu 2013-06-28 13:25:13 +02:00
ioport.h portio: Allow to mark portio lists as coalesced MMIO flushing 2013-10-17 17:24:15 +02:00
memattrs.h target-i386: introduce cpu_get_mem_attrs 2015-06-05 17:10:00 +02:00
memory-internal.h memory: unregister AddressSpace MemoryListener within BQL 2015-02-10 10:25:44 -07:00
memory.h memory: Allow replay of IOMMU mapping notifications 2015-10-05 12:39:03 -06:00
poison.h exec: Remove env from list of poisoned names 2013-07-27 11:22:54 +04:00
ram_addr.h Move RAMBlock and ram_list to ram_addr.h 2015-09-09 15:34:54 +02:00
semihost.h semihosting: add --semihosting-config arg sub-argument 2015-06-19 14:17:45 +01:00
softmmu-semi.h include/exec/softmmu-semi.h: Add support for 64-bit values 2015-09-07 10:39:27 +01:00
tb-hash.h cpu-defs: Move out TB_JMP defines 2015-06-26 16:00:51 +02:00