Type1 IOMMU 与 DMA 映射
1. 作用
Type1把用户虚拟内存映射到 device可见 IOVA:
1 | userspace VA |
它不是普通 CPU page table映射。
2. 初始化
VFIO_SET_IOMMU(VFIO_TYPE1_IOMMU)选择 backend。Group attach时检查:
- IOMMU group;
-可用 domain;
-domain几何和 page sizes;
-reserved regions;
-group/domain兼容;
-DMA ownership。
3. MAP_DMA
VFIO_IOMMU_MAP_DMA输入:
- vaddr;
- iova;
- size;
- READ/WRITE。
检查对齐、overflow、重叠、访问权限和 address range,再 pin并 iommu_map。
4. UNMAP_DMA
按 IOVA/size解除映射:
-从 DMA interval tree移除/切分;
-iommu_unmap;
-dirty处理;
-unpin pages;
-更新 locked memory accounting。
Unmap返回实际 unmapped size。
5. Page size
映射按 IOMMU支持 bitmap和用户页连续性选择粒度。大页可减少 IOTLB压力,但用户 VA、IOVA和物理页必须满足对齐/连续条件。
6. Reserved regions
MSI doorbell、firmware carveout或 identity regions不可与普通用户 IOVA冲突。Backend读取 group reserved regions并限制 map。
7. Domain共享
多个 group可共享 container domain,前提是 bus/domain geometry兼容。共享方便 VM统一 IOVA,但故障影响面更大。
8. v2语义
Type1 v2扩展改善 unmap和 DMA accounting等行为。用户必须先 VFIO_CHECK_EXTENSION,不能硬编码 backend能力。
9. Fault
设备访问未映射或权限错误 IOVA产生 IOMMU fault。应关联:
- requester/device;
- IOVA;
- read/write;
-当前 mappings;
-设备是否仍 DMA;
-unmap race。
10. RK3588
ROCKCHIP_IOMMU=y只说明 integrated IP IOMMU driver存在。具体 device必须有 iommus关联并形成可用于 VFIO的 group;PCIe endpoint还需要 host bridge IOMMU映射,本树 DTS未体现。
正在加载留言…