【问题标题】:Can PCI device address CPU PA directly if IOMMU (intel VT-D) is disabled如果 IOMMU (intel VT-D) 被禁用,PCI 设备能否直接寻址 CPU PA
【发布时间】:2019-02-21 07:57:58
【问题描述】:

我的理解是,如果一个 PCI 设备想要做 DMA RW,并且 IOMMU 被启用,驱动程序应该通过 pci_map_page 将 CPU PA 映射到一个 DMA 地址(对于非相干),然后 PCI 设备可以使用这个 DMA 地址和IOMMU 会将 DMA 地址转换为 CPU PA。

我的问题是:

  1. 驱动程序是否可以为给定设备禁用 IOMMU?
  2. 如果有人通过 bios 禁用 IOMMU,是否意味着任何 CPU PA 都可以直接 DMA RW?

【问题讨论】:

    标签: linux linux-kernel pci


    【解决方案1】:
    1. VT-d 硬件允许为每个设备单独设置 pass-through,但 Linux 当前不提供驱动程序 API 来执行此操作。
    2. 是的,当 IOMMU 被禁用时,来自 PCI/PCIe 设备的 DMA 使用系统物理地址,无论是在 BIOS 中还是在 Linux 命令行中使用 intel_iommu=off。

    【讨论】:

    • @pri 如果要传递通用 pci 设备,可以使用 vfio 驱动程序。 vfio 驱动程序会将硬件的 IOMMU 映射地址暴露给用户空间。
    • @prl 关于第二个问题,你的答案是没有 IOMMU,今天英特尔 CPU 可以允许 PCI 使用 CPU PA 进行 DMA RW 吗?
    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2018-02-25
    • 2022-11-10
    • 2023-03-07
    • 2013-11-06
    • 1970-01-01
    相关资源
    最近更新 更多