[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH for-4.2 v10 00/15] VIRTIO-IOMMU device
From: |
Eric Auger |
Subject: |
[Qemu-devel] [PATCH for-4.2 v10 00/15] VIRTIO-IOMMU device |
Date: |
Tue, 30 Jul 2019 19:21:22 +0200 |
This series rebases the virtio-iommu device on qemu 4.1.0-rc2
and implements the v0.12 virtio-iommu spec. The driver has just been
upstreamed in 5.3 so kernel dependencies are now resolved.
The pci proxy for the virtio-iommu device is now available and needs
to be instantiated from the command line using "-device virtio-iommu-pci".
At the moment the virtio-iommu-device only works in the ARM virt
machine with DT boot. Indeed, besides the device instantiation,
links between the PCIe root complex and the IOMMU must be described.
ACPI description is not yet supported at kernel level.
Best Regards
Eric
This series can be found at:
https://github.com/eauger/qemu/tree/v4.1.0-rc2-virtio-iommu-v10
virtio-iommu kernel driver is available from 5.3-rc3 onwards
Testing:
- tested with guest using virtio-net-pci
(,vhost=off,iommu_platform,disable-modern=off,disable-legacy=on)
and virtio-blk-pci
- VFIO/VHOST integration is not part of this series. Please follow
[PATCH RFC v5 0/5] virtio-iommu: VFIO integration respins
History:
v9 -> v10:
- rebase on 4.1.0-rc2, compliance with 0.12 spec
- removed ACPI part
- cleanup (see individual change logs)
- moved to a PATCH series
v8 -> v9:
- virtio-iommu-pci device needs to be instantiated from the command
line (RID is not imposed anymore).
- tail structure properly initialized
v7 -> v8:
- virtio-iommu-pci added
- virt instantiation modified
- DT and ACPI modified to exclude the iommu RID from the mapping
- VIRTIO_IOMMU_F_BYPASS, VIRTIO_F_VERSION_1 features exposed
v6 -> v7:
- rebase on qemu 3.0.0-rc3
- minor update against v0.7
- fix issue with EP not on pci.0 and ACPI probing
- change the instantiation method
v5 -> v6:
- minor update against v0.6 spec
- fix g_hash_table_lookup in virtio_iommu_find_add_as
- replace some error_reports by qemu_log_mask(LOG_GUEST_ERROR, ...)
v4 -> v5:
- event queue and fault reporting
- we now return the IOAPIC MSI region if the virtio-iommu is instantiated
in a PC machine.
- we bypass transactions on MSI HW region and fault on reserved ones.
- We support ACPI boot with mach-virt (based on IORT proposal)
- We moved to the new driver naming conventions
- simplified mach-virt instantiation
- worked around the disappearing of pci_find_primary_bus
- in virtio_iommu_translate, check the dev->as is not NULL
- initialize as->device_list in virtio_iommu_get_as
- initialize bufstate.error to false in virtio_iommu_probe
v3 -> v4:
- probe request support although no reserved region is returned at
the moment
- unmap semantics less strict, as specified in v0.4
- device registration, attach/detach revisited
- split into smaller patches to ease review
- propose a way to inform the IOMMU mr about the page_size_mask
of underlying HW IOMMU, if any
- remove warning associated with the translation of the MSI doorbell
v2 -> v3:
- rebase on top of 2.10-rc0 and especially
[PATCH qemu v9 0/2] memory/iommu: QOM'fy IOMMU MemoryRegion
- add mutex init
- fix as->mappings deletion using g_tree_ref/unref
- when a dev is attached whereas it is already attached to
another address space, first detach it
- fix some error values
- page_sizes = TARGET_PAGE_MASK;
- I haven't changed the unmap() semantics yet, waiting for the
next virtio-iommu spec revision.
v1 -> v2:
- fix redifinition of viommu_as typedef
Eric Auger (15):
update-linux-headers: Import virtio_iommu.h
linux-headers: update against 5.3-rc2
virtio-iommu: Add skeleton
virtio-iommu: Decode the command payload
virtio-iommu: Add the iommu regions
virtio-iommu: Endpoint and domains structs and helpers
virtio-iommu: Implement attach/detach command
virtio-iommu: Implement map/unmap
virtio-iommu: Implement translate
virtio-iommu: Implement probe request
virtio-iommu: Expose the IOAPIC MSI reserved region when relevant
virtio-iommu: Implement fault reporting
virtio_iommu: Handle reserved regions in translation process
virtio-iommu-pci: Add virtio iommu pci support
hw/arm/virt: Add the virtio-iommu device tree mappings
hw/arm/virt.c | 54 +-
hw/virtio/Kconfig | 5 +
hw/virtio/Makefile.objs | 2 +
hw/virtio/trace-events | 25 +
hw/virtio/virtio-iommu-pci.c | 88 ++
hw/virtio/virtio-iommu.c | 1004 +++++++++++++++++
include/hw/arm/virt.h | 2 +
include/hw/pci/pci.h | 1 +
include/hw/virtio/virtio-iommu.h | 66 ++
include/standard-headers/asm-x86/bootparam.h | 2 +
include/standard-headers/asm-x86/kvm_para.h | 3 +
include/standard-headers/linux/ethtool.h | 2 +
include/standard-headers/linux/pci_regs.h | 4 +
include/standard-headers/linux/virtio_ids.h | 1 +
include/standard-headers/linux/virtio_iommu.h | 165 +++
include/standard-headers/linux/virtio_pmem.h | 6 +-
linux-headers/asm-arm/kvm.h | 12 +
linux-headers/asm-arm/unistd-common.h | 2 +
linux-headers/asm-arm64/kvm.h | 17 +
linux-headers/asm-generic/mman-common.h | 15 +-
linux-headers/asm-generic/mman.h | 10 +-
linux-headers/asm-generic/unistd.h | 8 +-
linux-headers/asm-mips/unistd_n32.h | 1 +
linux-headers/asm-mips/unistd_n64.h | 1 +
linux-headers/asm-mips/unistd_o32.h | 1 +
linux-headers/asm-powerpc/mman.h | 6 +-
linux-headers/asm-powerpc/unistd_32.h | 1 +
linux-headers/asm-powerpc/unistd_64.h | 1 +
linux-headers/asm-s390/unistd_32.h | 2 +
linux-headers/asm-s390/unistd_64.h | 2 +
linux-headers/asm-x86/kvm.h | 28 +-
linux-headers/asm-x86/unistd_32.h | 2 +
linux-headers/asm-x86/unistd_64.h | 2 +
linux-headers/asm-x86/unistd_x32.h | 2 +
linux-headers/linux/kvm.h | 11 +-
linux-headers/linux/psp-sev.h | 5 +-
linux-headers/linux/virtio_iommu.h | 1 +
qdev-monitor.c | 1 +
scripts/update-linux-headers.sh | 3 +
39 files changed, 1522 insertions(+), 42 deletions(-)
create mode 100644 hw/virtio/virtio-iommu-pci.c
create mode 100644 hw/virtio/virtio-iommu.c
create mode 100644 include/hw/virtio/virtio-iommu.h
create mode 100644 include/standard-headers/linux/virtio_iommu.h
create mode 100644 linux-headers/linux/virtio_iommu.h
--
2.20.1
- [Qemu-devel] [PATCH for-4.2 v10 00/15] VIRTIO-IOMMU device,
Eric Auger <=
- [Qemu-devel] [PATCH for-4.2 v10 01/15] update-linux-headers: Import virtio_iommu.h, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 03/15] virtio-iommu: Add skeleton, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 02/15] linux-headers: update against 5.3-rc2, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 04/15] virtio-iommu: Decode the command payload, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 05/15] virtio-iommu: Add the iommu regions, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 06/15] virtio-iommu: Endpoint and domains structs and helpers, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 07/15] virtio-iommu: Implement attach/detach command, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 08/15] virtio-iommu: Implement map/unmap, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 09/15] virtio-iommu: Implement translate, Eric Auger, 2019/07/30
- [Qemu-devel] [PATCH for-4.2 v10 10/15] virtio-iommu: Implement probe request, Eric Auger, 2019/07/30