This RFC series aims at enabling KVM platform device passthrough. It implements a VFIO platform device, derived from VFIO PCI device. The VFIO platform device uses the host VFIO platform driver which must be bound to the assigned device prior to the QEMU system start. - the guest can directly access the device register space - assigned device IRQs are transparently routed to the guest by QEMU/KVM (2 methods currently are supported) - iommu is transparently programmed to prevent the device from accessing physical pages outside of the guest address space the patch relies on the following QEMU patch series: - Alex Graf's "Dynamic sysbus device allocation support" http://lists.gnu.org/archive/html/qemu-ppc/2014-07/msg00047.html (up to "sysbus: Make devices spawnable via -device") - [RFC v2] machvirt dynamic sysbus device instantiation This patch series is made of the following patch files: 1-5) Modifications to PCI code to prepare for VFIO platform device 6) split of PCI specific code and generic code (move) 7) creation of the VFIO platform device, without irqfd support (MMIO direct access and IRQ assignment). 8-9) addition of irqfd/virqfd support 10) capability to dynamically instantiate the device v4->v5: - rebase on v2.1.0 PCI code - take into account Alex Williamson comments on PCI code rework - trace updates in vfio_region_write/read - remove fd from VFIORegion - get/put ckeanup - bug fix: bar region's vbasedev field duly initialization - misc cleanups in platform device - device tree node generation removed from device and handled in hw/arm/dyn_sysbus_devtree.c - remove "hw/vfio: add an example calxeda_xgmac": with removal of device tree node generation we do not have so many things to implement in that derived device yet. May be re-introduced later on if needed typically for reset/migration. - no GSI routing table anymore v3->v4 changes (Eric Auger, Alvise Rigo) - rebase on last VFIO PCI code (v2.1.0-rc0) - full git history rework to ease PCI code change review - mv include files in hw/vfio - DPRINTF reformatting temporarily moved out - support of VFIO virq (removal of resamplefd handler on user-side) - integration with sysbus dynamic instantiation framwork - removal of unrealize and cleanup routines until it is better understood what is really needed - Support of VFIO for Amba devices should be handled in an inherited device to specialize the device tree generation (clock handle currently missing in framework however) - "Always use eventfd as notifying mechanism" temporarily moved out - static instantiation is not mainstream (although it remains possible) note if static instantiation is used, irqfd must be setup in machine file when virtual IRQ is known - create the GSI routing table on qemu side v2->v3 changes (Alvise Rigo, Eric Auger): - Following Alex W recommandations, further efforts to factorize the code between PCI:introduction of VFIODevice and VFIORegion as base classes - unique reset handler for platform and PCI - cleanup following Kim's comments - multiple IRQ support mechanics should be in place although not tested - Better handling of MMIO multiple regions - New features and fixes by Alvise (multiple compat string, exec flag, force eventfd usage, amba device tree support) - irqfd support v1->v2 changes (Kim Phillips, Eric Auger): - IRQ initial support (legacy mode where eventfds are handled on user side) - hacked dynamic instantiation v1 (Kim Phillips): - initial split between PCI and platform - MMIO support only - static instantiation This patch has the following kernel side dependencies: - [RFC Patch v6 0/20] VFIO support for platform devices https://www.mail-archive.com/kvm@xxxxxxxxxxxxxxx/msg103247.html - [Patch] ARM: KVM: Handle IPA unmapping on memory region deletion https://patches.linaro.org/27691/ - [PATCH RFC] ARM: KVM: add irqfd support http://www.gossamer-threads.com/lists/linux/kernel/1981144 - arm/arm64: KVM: Various VGIC cleanups and improvements http://comments.gmane.org/gmane.linux.ports.arm.kernel/340430 - [PATCH] ARM: KVM: Enable the KVM-VFIO device https://lists.cs.columbia.edu/pipermail/kvmarm/2014-March/008629.html those kernel pieces can be found at: git://git.linaro.org/people/eric.auger/linux.git (branch irqfd_integ_v4) QEMU patch files and dependencies can be found at: git://git.linaro.org/people/eric.auger/qemu.git (branch vfio_integ_v5) The patch series was tested on Calxeda Midway (ARMv7) where one xgmac is assigned to KVM host while the second one is assigned to the guest. Unfortunately a single IRQ is exercised. Reworked PCI device is not tested. https://wiki.linaro.org/LEG/Engineering/Virtualization/Platform_Device_Passthrough_on_Midway Best Regards Eric Eric Auger (9): hw/vfio/pci: Rename VFIODevice into VFIOPCIDevice hw/vfio/pci: introduce VFIODevice hw/vfio/pci: Introduce VFIORegion hw/vfio/pci: split vfio_get_device hw/vfio: create common module hw/vfio/platform: add vfio-platform support hw/intc/arm_gic_kvm: advertise irqfd hw/vfio/platform: Add irqfd support hw/arm/dyn_sysbus_devtree: enable simple VFIO dynamic instantiation Kim Phillips (1): vfio: move hw/misc/vfio.c to hw/vfio/pci.c Move vfio.h into include/hw/vfio LICENSE | 2 +- MAINTAINERS | 2 +- hw/Makefile.objs | 1 + hw/arm/dyn_sysbus_devtree.c | 138 ++++ hw/intc/arm_gic_kvm.c | 2 + hw/misc/Makefile.objs | 1 - hw/ppc/spapr_pci_vfio.c | 2 +- hw/vfio/Makefile.objs | 5 + hw/vfio/common.c | 990 +++++++++++++++++++++++++ hw/{misc/vfio.c => vfio/pci.c} | 1499 +++++++------------------------------- hw/vfio/platform.c | 611 ++++++++++++++++ include/hw/vfio/vfio-common.h | 151 ++++ include/hw/vfio/vfio-platform.h | 77 ++ include/hw/{misc => vfio}/vfio.h | 0 14 files changed, 2260 insertions(+), 1221 deletions(-) create mode 100644 hw/vfio/Makefile.objs create mode 100644 hw/vfio/common.c rename hw/{misc/vfio.c => vfio/pci.c} (71%) create mode 100644 hw/vfio/platform.c create mode 100644 include/hw/vfio/vfio-common.h create mode 100644 include/hw/vfio/vfio-platform.h rename include/hw/{misc => vfio}/vfio.h (100%) -- 1.8.3.2 _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm