This series introduces support for in-kernel GICv3 ITS emulation. On dt guest the functionality is complete and was tested on Cavium ThunderX with virtio-net-pci and vhost-net.
On ACPI guest the series was tested with virtio-net-pci only. For vhost-net, using MSIX we currently miss the ACPI IORT table generation linking the PCIe host controller with the ITS. The work is ongoing and will be submitted separately. Anyway the kernel ACPI IORT ITS node support is not upstreamed yet. The first patch is not really related to virtual ITS but advertises the KVM GSI routing support which goes along with MSI injection. For ACPI ITS and PCIe support, use in-flight Tomasz' series: - [PATCH V10 0/8] Introduce ACPI world to ITS, https://lkml.org/lkml/2016/9/6/153 - Support for ARM64 ACPI based PCI host controller, https://lwn.net/Articles/690995/ Git Information: v7: https://github.com/eauger/qemu/tree/v2.7.0-vITS-v7 v6: https://github.com/eauger/qemu/tree/v2.7.0-vITS-v6 History: V6 => v7: - add my Signed-off-by on patches 7 and 8 - add Peter's R-b on 1, 2 - add/use kvm_msi_devid_required macro - add translater_gpa_known - in arm_gicv3_its_kvm.c, remove the notifier and directly compute the ITS translater GPA in first kvm_its_send_msi() call as suggested by Peter. Fix the memory region reference leak. fix the comment typo. v5 => v6: - moved from RFC to PATCH since all the host kernel dependencies now are fixed - use Shannon's MADT patches I was not aware of - smoother integration since the kernet ITS init sequence has now been updated in 4.8 - kvm_msi_use_devid flag handled in non archutecture specific code - vmstate_its fields removed and migration_blocker added v4 => v5: - fix compilation issue with arm-softmmu target - rebase on target-arm: Fix unreachable code in gicv3_class_name() - add ACPI support - kernel ITS init sequence is not yet similar to GICv2/V3 ones. This will be addressed in a subsequent respin. v3 => v4: - Took into account Peter's comments (at the exception of sub-class operation changes) - rebase on Andre's kernel ITS emulation series v8 - rework KVM init sequence and KVM device creation/settings overall. I do not use kvm_arm_register_device due to the way the kernel API is devises (see discussion on the kernel ML) - change the computation of the GITS_TRANSLATER base address - fix compilation issues - new "arget-arm: move gicv3_class_name from machine to kvm_arm.h" v2 => v3: - Really added unmigratable flag, was overlooked in v2 - Fixed checkpatch issue with initializing static variable to zero v1 => v2: - Added registers and reset method - Added unmigratable flag - Rebased on top of current master, use kvm_arch_fixup_msi_route() now Eric Auger (2): hw/intc/arm_gic(v3)_kvm: Initialize gsi routing target-arm: move gicv3_class_name from machine to kvm_arm.h Pavel Fedin (4): hw/intc/arm_gicv3_its: Implement ITS base class kvm-all: Pass requester ID to MSI routing functions hw/intc/arm_gicv3_its: Implement support for in-kernel ITS emulation arm/virt: Add ITS to the virt board Shannon Zhao (2): ACPI: Add GIC Interrupt Translation Service Structure definition ARM: Virt: ACPI: Add GIC ITS description in ACPI MADT table hw/arm/virt-acpi-build.c | 12 +++ hw/arm/virt.c | 47 +++++++++-- hw/intc/Makefile.objs | 2 + hw/intc/arm_gic_kvm.c | 12 +++ hw/intc/arm_gicv3_its_common.c | 148 +++++++++++++++++++++++++++++++++ hw/intc/arm_gicv3_its_kvm.c | 121 +++++++++++++++++++++++++++ hw/intc/arm_gicv3_kvm.c | 13 +++ include/hw/acpi/acpi-defs.h | 13 ++- include/hw/intc/arm_gicv3_its_common.h | 78 +++++++++++++++++ include/sysemu/kvm.h | 9 ++ kvm-all.c | 9 ++ kvm-stub.c | 1 + target-arm/kvm_arm.h | 35 +++++++- target-arm/machine.c | 15 ---- 14 files changed, 492 insertions(+), 23 deletions(-) create mode 100644 hw/intc/arm_gicv3_its_common.c create mode 100644 hw/intc/arm_gicv3_its_kvm.c create mode 100644 include/hw/intc/arm_gicv3_its_common.h -- 2.5.5