xemu/include/hw
Jason Wang 375f74f473 vhost: generalize iommu memory region
We assumes the iommu_ops were attached to the root region of address
space. This may not be true for all kinds of IOMMU implementation and
especially after commit 3716d5902d ("pci: introduce a bus master
container"). So fix this by not assuming as->root has iommu_ops,
instead depending on the regions reported by memory listener through:

- register a memory listener to dma_as
- during region_add, if it's a region of IOMMU, register a specific
  IOMMU notifier, and store all notifiers in a list.
- during region_del, compare and delete the IOMMU notifier from the list

This is also a must for making vhost device IOTLB works for all types
of IOMMUs. Note, since we register one notifier during each
.region_add, the IOTLB may be flushed more than one times, this is
suboptimal and could be optimized in the future.

Reported-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Fixes: 3716d5902d ("pci: introduce a bus master container")
Cc: Peter Xu <peterx@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Tested-by: Maxime Coquelin <maxime.coquelin@redhat.com>
2017-03-30 19:09:16 +03:00
..
acpi hw/acpi/vmgenid: prevent more than one vmgenid device 2017-03-22 18:29:27 +02:00
adc STM32F2xx: Add the ADC device 2016-10-04 13:28:07 +01:00
arm bcm2835: add sdhost and gpio controllers 2017-02-28 17:10:00 +00:00
audio
block hw/block: Introduce share-rw qdev property 2017-02-28 20:40:36 +01:00
char char: rename CharDriverState Chardev 2017-01-27 18:07:59 +01:00
core generic-loader: Add a generic loader 2016-10-04 13:28:09 +01:00
cpu
cris char: rename CharDriverState Chardev 2017-01-27 18:07:59 +01:00
display
dma include: Fix typos found by codespell 2017-01-24 23:26:52 +03:00
gpio bcm2835_gpio: add bcm2835 gpio controller 2017-02-28 17:10:00 +00:00
i2c i2c: Allow I2C devices to NAK start events 2017-01-09 11:40:20 +00:00
i386 Revert "apic: save apic_delivered flag" 2017-03-27 14:41:01 +02:00
ide ide: core: add cleanup function 2017-03-15 20:50:14 -04:00
input ps2: fix mouse mappings for right/middle button 2017-02-20 11:25:38 +01:00
intc hw/intc/arm_gicv3_kvm: Add ICC_SRE_EL1 register to vmstate 2017-02-28 17:10:00 +00:00
ipack
ipmi
isa
kvm
lm32 intc: make HMP 'info irq' and 'info pic' commands use InterruptStatsProvider interface 2016-10-04 10:00:25 +02:00
m68k hw/char/mcf_uart: QOMify the ColdFire UART 2017-02-16 14:06:56 +01:00
mem nvdimm acpi: rename nvdimm_acpi_hotplug 2016-11-15 17:20:37 +02:00
mips Move target-* CPU file into a target/ folder 2016-12-20 21:52:12 +01:00
misc target-arm: Implement BCM2835 hardware RNG 2017-02-28 12:08:13 +00:00
net cadence_gem: Add support for screening 2016-09-22 18:13:07 +01:00
nvram fw-cfg: turn FW_CFG_FILE_SLOTS into a device property 2017-01-18 22:59:53 +02:00
pci hw/virtio: fix Power Management Control Register for PCI Express virtio devices 2017-03-16 01:46:41 +02:00
pci-host pseries: Don't expose PCIe extended config space on older machine types 2017-03-14 11:54:17 +11:00
ppc spapr: fix memory hot-unplugging 2017-03-29 11:35:16 +11:00
s390x virtio-ccw: support VIRTIO_QUEUE_MAX virtqueues 2017-02-24 10:15:18 +01:00
scsi hw: Deprecate -drive if=scsi with non-onboard HBAs 2017-02-21 13:17:45 +01:00
sd hw/sd: add card-reparenting function 2017-02-28 17:10:00 +00:00
sh4 char: rename CharDriverState Chardev 2017-01-27 18:07:59 +01:00
smbios smbios: filter based on CONFIG_SMBIOS rather than TARGET 2017-01-16 17:52:34 +01:00
sparc char: rename CharDriverState Chardev 2017-01-27 18:07:59 +01:00
ssi aspeed/smc: handle SPI flash Command mode 2017-01-20 11:15:08 +00:00
timer armv7m: Split systick out from NVIC 2017-02-28 16:18:49 +00:00
tricore
unicore32
usb
vfio vfio: Pass an error object to vfio_get_device 2016-10-17 10:58:00 -06:00
virtio vhost: generalize iommu memory region 2017-03-30 19:09:16 +03:00
watchdog wdt: Add Aspeed watchdog device model 2017-02-07 18:29:59 +00:00
xen trace: switch to modular code generation for sub-directories 2017-01-31 17:11:18 +00:00
boards.h numa,spapr: align default numa node memory size to 256MB 2017-03-22 11:32:42 +11:00
bt.h char: rename CharDriverState Chardev 2017-01-27 18:07:59 +01:00
compat.h hw/acpi/vmgenid: prevent device realization on pre-2.5 machine types 2017-03-22 18:27:35 +02:00
devices.h char: rename CharDriverState Chardev 2017-01-27 18:07:59 +01:00
elf_ops.h elf-loader: Allow late loading of elf 2017-02-28 12:04:48 +01:00
empty_slot.h
fw-path-provider.h
hotplug.h qdev: hotplug: drop HotplugHandler.post_plug callback 2016-11-15 17:20:37 +02:00
hw.h hw: move reset handlers from vl.c to hw/core 2017-01-16 17:52:35 +01:00
ide.h xen-platform: add missing disk unplug option 2017-01-27 15:23:29 -08:00
irq.h
loader-fit.h loader: Support Flattened Image Trees (FIT images) 2017-02-21 23:47:40 +00:00
loader.h elf-loader: Allow late loading of elf 2017-02-28 12:04:48 +01:00
nmi.h
or-irq.h irq: Add a new irq device that allows the ORing of lines 2016-10-04 13:28:07 +01:00
pcmcia.h
platform-bus.h
ptimer.h tests: fix ptimer leaks 2017-03-01 00:09:28 +04:00
qdev-core.h Introduce DEVICE_CATEGORY_CPU for CPU devices 2017-01-27 18:07:31 +01:00
qdev-dma.h
qdev-properties.h char: rename CharDriverState Chardev 2017-01-27 18:07:59 +01:00
qdev.h
register.h hw/registerfields.h: Pull FIELD etc macros out of hw/register.h 2017-01-27 15:20:21 +00:00
registerfields.h hw/registerfields.h: Pull FIELD etc macros out of hw/register.h 2017-01-27 15:20:21 +00:00
stream.h
sysbus.h sysbus: Remove ignored return value of FindSysbusDeviceFunc 2016-09-27 17:03:34 -03:00
usb.h usb: replace handle_destroy with unrealize 2017-02-23 15:40:19 +01:00