Type1 IOMMU 与 DMA 映射

Type1 IOMMU 与 DMA 映射

1. 作用

Type1把用户虚拟内存映射到 device可见 IOVA:

1
2
3
4
5
userspace VA
-> pin user pages
-> physical pages
-> iommu_map(domain, IOVA)
-> device DMA

它不是普通 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未体现。

文章互动

阅读 --

留言

0 条留言

正在加载留言…