禁用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
相关产品推荐
相关产品推荐

