问题标签 [iommu]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
29 浏览

operating-system - 如果前一个进程使用 DMA 切换到新进程时操作系统和 DMA 会做什么

如果前一个进程正在使用 DMA 在外设和 IO 之间传输数据,并且没有完成,并且更高优先级的进程已经准备好。切换到新进程后,操作系统和 DMA 将做什么,如果它与 IOMMMU 一起工作,因为 ASID 已更改。新进程是否可以使用 DMA,即使它正在为以前的进程服务?

0 投票
1 回答
146 浏览

linux-kernel - 我可以使用从 DeviceA 上的 dma_alloc_coherent 返回的地址在 DeviceB 上调用 dma_map_single() 吗?

我正在编写需要在多个 PCIE 设备之间进行 DMA 内存的自定义 linux 驱动程序。我有以下情况:

  1. 我正在使用 dma_alloc_coherent 为 DeviceA 分配内存
  2. 然后我使用 DeviceA 来填充内存缓冲区。

到目前为止一切都很好,但此时我想将内存 DMA 到 DeviceB,但我不确定这样做的正确方法。

现在,我使用在 DeviceA 上调用的 dma_alloc_coherent 返回的地址为 DeviceB 调用 dma_map_single。这似乎在 x86_64 中运行良好,但感觉就像我违反了规则,因为:

  1. dma_map_single 应该使用从 kmalloc(“和朋友”)分配的内存来调用。使用从另一个设备的 dma_alloc_coherent 调用返回的地址调用是否有问题?

  2. 如果 #1 是“好的”,那么我仍然不确定是否有必要调用 dma_map_single 内存所需的 dma_sync_* 函数。由于内存最初是从 dma_alloc_coherent 分配的,它应该是未缓存的内存,所以我相信答案是“不需要 dma_sync_* 调用”,但我不确定。

我担心我只是幸运地完成了这项工作,未来的内核更新会让我失望,因为目前还不清楚我是否正确地遵循了 API 规则。我的代码最终也必须在 ARM 和 PPC 上运行,所以我需要确保我以独立于平台的方式做事,而不是通过一些 x86_64 架构破解来解决问题。

我将此用作参考: https ://www.kernel.org/doc/html/latest/core-api/dma-api.html

0 投票
1 回答
131 浏览

linux-kernel - kernelstub 在 Ubuntu 21.04 上找不到内核或 initrd 映像

我正在尝试使用 kernelstub 的 --add-option 标志启用 Intel_IOMMU,但该命令总是失败,返回 kernelstub 找不到内核映像。

我尝试手动设置内核路径,但它返回它找不到 initrd 映像,我为此做了同样的事情,它又循环回到找不到内核映像。

0 投票
0 回答
44 浏览

linux-kernel - 使用 IOMMU,为什么我们不必固定 DMA 缓冲区页面?

我从某个地方听说,如果没有 IOMMU,S/W 应该固定 DMA 缓冲区,直到 DMA 完成,因为同时可以将物理页面分配给另一个处理器。而且我听说如果我们有设备的 IOMMU,我们不需要固定页面(DMA 缓冲区)。但我认为即使使用 IOMMU,页面仍然可以在 DMA 完成之前分配给另一个进程,因此可能会出现问题。当我们有 IOMMU 时,为什么我们不必固定页面?iommu 子系统是否固定页面?

0 投票
0 回答
17 浏览

ethernet - 到 SR-VIO 还是不到 SR-VIO;那是我们应该问你的 BIOS

网上似乎没有关于 SR-VIO 漏洞的信息。

SR-VIO 的当前状态是什么?我们应该在 BIOS 中启用还是禁用此功能?

0 投票
1 回答
61 浏览

linux-device-driver - PCIe DMA aarch64 0x10 转换错误

我正在尝试将 PCIe 驱动程序写入从主机内存到 FPGA 的 DMA 页面。我的主机设置是 Cavium ThunderX2,我的 FPGA 是 Xilinx Alveo U50。

来自/到主机的 DMA 会导致 ARM SMMU v3.4 引发事件 0x10 Translation fault。我正在使用 dma_map_single(..) 和 dma_alloc_coherent(..) Linux API 将页面的虚拟地址映射到支持 DMA 的地址。

进一步检查事件记录、上下文描述符和流表条目,我有以下信息。

获得的页面的示例虚拟和 DMA 地址 -

当一切看起来都很好时,我无法弄清楚为什么我会遇到第 1 阶段的翻译错误。从技术上讲,我应该遇到第 2 阶段故障,因为它被绕过并且输入地址应该通过 TTB0 进行转换。

PS我是ARM v8的新手。如果您需要评论中的其他信息,请告诉我。

附件是故障F_TRANSLATION的图片。

0 投票
1 回答
26 浏览

x86 - 如何为我的管理程序配置 IOMMU 保护?

我正在基于英特尔 vt-x 技术开发自己的裸机管理程序。

我的目标是以任何方式使我在我的管理程序上运行的操作系统无法访问它,因此我配置了一个 EPT 表以防止内存访问。我相信现在我缺少对具有 DMA 访问权限的设备的保护。

我想知道如何防止所有 PCI 设备访问我的管理程序内存区域?代码示例对我来说是完美的。

顺便说一句:如果可能会影响答案,我会使用 QEMU 环境测试我的项目。