默认情况下,x86平台上IOMMU是否转换PCI事务中的地址?

时间:2018-11-29 06:13:29

标签: linux-kernel pci iommu

我知道PCI具有称为ATS的功能,可以将虚拟地址转换为物理地址,但是我不确定在当前的x86平台上是否默认启用它。

如果是,如何在Linux系统中生成虚拟地址和相应的页表?

这就是我现在想的。首先,诸如pci_map_ *之类的DMA API将调用intel iommu驱动程序来设置页表并获取io虚拟地址。其次,PCI设备将使用该虚拟io地址开始事务,而vt-d会将该虚拟io地址转换为物理地址。我说的对吗?

1 个答案:

答案 0 :(得分:0)

目前还没有任何支持ATS的Intel CPU。但是,可以在以下位置获得Intel VT-d规格 http://www.intel.com/content/dam/www/public/us/en/documents/product-specifications/vt-directed-io-spec.pdf。它指定如何启用ATS以及如何设置页表。尤其参见第4章。 https://01.org/blogs/ashokraj/2018/recent-enhancements-intel-virtualization-technology-directed-i/o-intel-vt-d上还有一些图表和说明,可能会有所帮助。