[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC v3 02/25] hw/iommu: introduce DualStageIOMMUObject
From: |
David Gibson |
Subject: |
Re: [RFC v3 02/25] hw/iommu: introduce DualStageIOMMUObject |
Date: |
Fri, 31 Jan 2020 14:59:14 +1100 |
On Wed, Jan 29, 2020 at 04:16:33AM -0800, Liu, Yi L wrote:
> From: Liu Yi L <address@hidden>
>
> Currently, many platform vendors provide the capability of dual stage
> DMA address translation in hardware. For example, nested translation
> on Intel VT-d scalable mode, nested stage translation on ARM SMMUv3,
> and etc. In dual stage DMA address translation, there are two stages
> address translation, stage-1 (a.k.a first-level) and stage-2 (a.k.a
> second-level) translation structures. Stage-1 translation results are
> also subjected to stage-2 translation structures. Take vSVA (Virtual
> Shared Virtual Addressing) as an example, guest IOMMU driver owns
> stage-1 translation structures (covers GVA->GPA translation), and host
> IOMMU driver owns stage-2 translation structures (covers GPA->HPA
> translation). VMM is responsible to bind stage-1 translation structures
> to host, thus hardware could achieve GVA->GPA and then GPA->HPA
> translation. For more background on SVA, refer the below links.
> - https://www.youtube.com/watch?v=Kq_nfGK5MwQ
> - https://events19.lfasiallc.com/wp-content/uploads/2017/11/\
> Shared-Virtual-Memory-in-KVM_Yi-Liu.pdf
>
> As above, dual stage DMA translation offers two stage address mappings,
> which could have better DMA address translation support for passthru
> devices. This is also what vIOMMU developers are doing so far. Efforts
> includes vSVA enabling from Yi Liu and SMMUv3 Nested Stage Setup from
> Eric Auger.
> https://www.spinics.net/lists/kvm/msg198556.html
> https://lists.gnu.org/archive/html/qemu-devel/2019-07/msg02842.html
>
> Both efforts are aiming to expose a vIOMMU with dual stage hardware
> backed. As so, QEMU needs to have an explicit object to stand for
> the dual stage capability from hardware. Such object offers abstract
> for the dual stage DMA translation related operations, like:
>
> 1) PASID allocation (allow host to intercept in PASID allocation)
> 2) bind stage-1 translation structures to host
> 3) propagate stage-1 cache invalidation to host
> 4) DMA address translation fault (I/O page fault) servicing etc.
>
> This patch introduces DualStageIOMMUObject to stand for the hardware
> dual stage DMA translation capability. PASID allocation/free are the
> first operation included in it, in future, there will be more operations
> like bind_stage1_pgtbl and invalidate_stage1_cache and etc.
>
> Cc: Kevin Tian <address@hidden>
> Cc: Jacob Pan <address@hidden>
> Cc: Peter Xu <address@hidden>
> Cc: Eric Auger <address@hidden>
> Cc: Yi Sun <address@hidden>
> Cc: David Gibson <address@hidden>
> Signed-off-by: Liu Yi L <address@hidden>
Several overall queries about this:
1) Since it's explicitly handling PASIDs, this seems a lot more
specific to SVM than the name suggests. I'd suggest a rename.
2) Why are you hand rolling structures of pointers, rather than making
this a QOM class or interface and putting those things into methods?
3) It's not really clear to me if this is for the case where both
stages of translation are visible to the guest, or only one of
them.
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature
- [RFC v3 00/25] intel_iommu: expose Shared Virtual Addressing to VMs, Liu, Yi L, 2020/01/29
- [RFC v3 06/25] scripts/update-linux-headers: Import iommu.h, Liu, Yi L, 2020/01/29
- [RFC v3 04/25] hw/pci: introduce pci_device_iommu_context(), Liu, Yi L, 2020/01/29
- [RFC v3 09/25] vfio: check VFIO_TYPE1_NESTING_IOMMU support, Liu, Yi L, 2020/01/29
- [RFC v3 08/25] vfio: pass IOMMUContext into vfio_get_group(), Liu, Yi L, 2020/01/29
- [RFC v3 02/25] hw/iommu: introduce DualStageIOMMUObject, Liu, Yi L, 2020/01/29
- Re: [RFC v3 02/25] hw/iommu: introduce DualStageIOMMUObject,
David Gibson <=
- [RFC v3 07/25] header file update VFIO/IOMMU vSVA APIs, Liu, Yi L, 2020/01/29
- [RFC v3 05/25] intel_iommu: provide get_iommu_context() callback, Liu, Yi L, 2020/01/29
- [RFC v3 03/25] hw/iommu: introduce IOMMUContext, Liu, Yi L, 2020/01/29
- [RFC v3 10/25] vfio: register DualStageIOMMUObject to vIOMMU, Liu, Yi L, 2020/01/29
- [RFC v3 01/25] hw/pci: modify pci_setup_iommu() to set PCIIOMMUOps, Liu, Yi L, 2020/01/29