记录一次dma_alloc_coherent失败的解决

dma_alloc_coherent(dev, ...)

分配内存失败,驱动加载过程中 有对需要分配节点进行设置mask

 失败是因为dma_alloc_coherent申请1MB内存失败

刚开始怀疑linux系统内存伙伴系统中在1MB内存上没有内存了

检查发现还是足够的

 查看别人博客

ftrace+printk 跟踪dma_alloc_coherent分配失败_dachunfree的博客-CSDN博客

初步怀疑和DMA内存虚拟地址有关,然后查看启动DMA相关日志

失败的日志

 差别在iommu使能了的,出现dma_alloc_coherent失败

后续准备禁止iommu

通过对比 /proc/cmdline

发现linux系统启动grub脚本是打开的iommu的,正常能分配内存的主机是关闭的

 Ubuntu开机引导grub进行修改启动参数

sudo vi /etc/default/grub

关闭iommu配置参数

sudo update-grub     更新启动镜像并生效

重启系统

发现DMAR IOMMU enabled没有了

dma_alloc_coherent即可正常分配内存

Ubuntu预留内存启动系统

https://blog.csdn.net/weixin_36304957/article/details/116616193

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值