You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

禁用IOMMU/SMMU后dma_alloc_coherent返回总线地址超出物理内存范围的疑问

问题描述
  • 在某PCIe EP测试驱动中调用dma_alloc_coherent()分配16K DMA空间,打印返回的虚拟地址和总线地址,在aarch64架构系统上得到日志:

[ 106.426075] edev 0000:01:00.0: Allocated DMA region virt 000000009ddf3f42, phys 00000000b8ade6d9

  • 按照理解,第二个地址00000000b8ade6d9是总线地址,当系统禁用IOMMU/SMMU时,总线地址应与物理地址一致。已通过两种方式禁用IOMMU/SMMU:在Kconfig中关闭CONFIG_IOMMU_SUPPORT,并在设备树中禁用smmu设备,因此该地址理应是物理地址。但系统仅有从0起始的2G物理内存,00000000b8ade6d9不在该范围内,这一现象如何解释?
系统环境信息

使用PetaLinux 2023.1为Versal设备的PS构建内核,内核版本为6.1.5-xilinx-v2023.1,相关系统信息如下:

dmesg部分输出

root@a72:/home/cmic# dmesg|more
[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd083]
[    0.000000] Linux version 6.1.5-xilinx-v2023.1 (oe-user@oe-host) (aarch64-xilinx-linux-gcc (GCC) 12.2.0, GNU ld (GNU Binutils) 2.39.0.20220819) #1 SMP Fri Apr 21 07:47:58 UTC 2023
[    0.000000] Machine model: Xilinx Versal
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x0000000000000000-0x000000007fffffff]
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x000000007fffffff]
...

/proc/iomem输出

root@a72:/home/cmic# cat /proc/iomem
00000000-7fffffff : System RAM
...
20100000000-2010fffffff : axi-pcie@20100000000
  20100000000-201027fffff : PCI Bus 0000:01
    20100000000-20100ffffff : 0000:01:00.0
      20100000000-20100ffffff : edev
...

内容的提问来源于stack exchange,提问作者bruin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 08:14:57