分享一篇我写的知识文章: https://developer.arm.com/doc...
问题
SMMUv3硬件可以设计为:
- 只有stage1地址转换支持
- 只用stage2地址转换支持
- 既支持stage1又支持stage2
那软件怎么使用stage1和stage2的呢?
回答
这取决于软件的使用场景。
Linux Kernel
- 如果SMMUv3硬件只支持stage1或只支持stage2,那么支持的stage可以用于Linux的DMA-IOMMU和VFIO的场景。在Shared Virtual Address (SVA)场景下,必须使用stage1。因而,只支持stage2的SMMUv3 hardware无法使用在SVA场景。
- 如果SMMUv3硬件既支持stage1又支持stage2,下表展示了不同场景下stage的使用情况:
Use case | IOMMU Domain | Which stage to be used |
---|---|---|
DMA-IOMMU mapping | IOMMU_DOMAIN_IDENTITY | Stage 1 bypass and stage 2 bypass |
DMA-IOMMU mapping | IOMMU_DOMAIN_DMA | Stage 1 |
VFIO with VFIO_TYPE1_IOMMU or VFIO_TYPE1v2_IOMMU | IOMMU_DOMAIN_UNMANAGED | Stage 1 |
VFIO with VFIO_TYPE1_NESTING_IOMMU | IOMMU_DOMAIN_UNMANAGED | Stage 2 |
SVA | IOMMU_DOMAIN_DMA | Stage 1 |
DMA IOMMU mapping
VFIO
SVA
Xen
当在Xen上使用SMMUv3实现设备pass through时,仅限于使用stage2.请参见:https://github.com/xen-projec...