xemu/hw/vfio
Alexey Kardashevskiy 8c37faa475 vfio-pci, ppc64/spapr: Reorder group-to-container attaching
At the moment VFIO PCI device initialization works as follows:
vfio_realize
	vfio_get_group
		vfio_connect_container
			register memory listeners (1)
			update QEMU groups lists
		vfio_kvm_device_add_group

Then (example for pseries) the machine reset hook triggers region_add()
for all regions where listeners from (1) are listening:

ppc_spapr_reset
	spapr_phb_reset
		spapr_tce_table_enable
			memory_region_add_subregion
				vfio_listener_region_add
					vfio_spapr_create_window

This scheme works fine until we need to handle VFIO PCI device hotplug
and we want to enable PPC64/sPAPR in-kernel TCE acceleration on,
i.e. after PCI hotplug we need a place to call
ioctl(vfio_kvm_device_fd, KVM_DEV_VFIO_GROUP_SET_SPAPR_TCE).
Since the ioctl needs a LIOBN fd (from sPAPRTCETable) and a IOMMU group fd
(from VFIOGroup), vfio_listener_region_add() seems to be the only place
for this ioctl().

However this only works during boot time because the machine reset
happens strictly after all devices are finalized. When hotplug happens,
vfio_listener_region_add() is called when a memory listener is registered
but when this happens:
1. new group is not added to the container->group_list yet;
2. VFIO KVM device is unaware of the new IOMMU group.

This moves bits around to have all necessary VFIO infrastructure
in place for both initial startup and hotplug cases.

[aw: ie, register vfio groups with kvm prior to memory listener
registration such that kvm-vfio pseudo device ioctls are available
during the region_add callback]

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
2017-07-17 12:39:09 -06:00
..
amd-xgbe.c sysbus: Set user_creatable=false by default on TYPE_SYS_BUS_DEVICE 2017-05-17 10:37:01 -03:00
calxeda-xgmac.c sysbus: Set user_creatable=false by default on TYPE_SYS_BUS_DEVICE 2017-05-17 10:37:01 -03:00
ccw.c vfio/ccw: update sense data if a unit check is pending 2017-05-19 12:29:01 +02:00
common.c vfio-pci, ppc64/spapr: Reorder group-to-container attaching 2017-07-17 12:39:09 -06:00
Makefile.objs vfio/ccw: vfio based subchannel passthrough driver 2017-05-19 12:29:01 +02: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: Fixup v0 PCIe capabilities 2017-07-10 10:39:43 -06: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: Test realized when using VFIOGroup.device_list iterator 2017-07-10 10:39:43 -06:00
spapr.c memory/iommu: QOM'fy IOMMU MemoryRegion 2017-07-14 12:04:41 +02:00
trace-events vfio: trace map/unmap for notify as well 2017-02-17 21:52:31 +02:00