如何解决当使用 malloc
我有一个带有 DMA 引擎的定制 PCIe 卡。 我正在尝试使用 malloc(非页面对齐)为 DMA 分配用户空间内存,然后使用 get_user_pages_fast(也尝试过普通的 get_user_pages),然后调用 pci_map_sg 在高通 arm64 平台上的页面上。 在此特定设备中,在使用 malloc(多次迭代)分配了总共约 256 MB(重新启动后)的内存后,pci_map_sg 失败。
收到错误后,所有后续 pci_map_sg 都失败,直到重新启动。
在使用 malloc/get_user_pages_fast/pci_map_sg 时,似乎有些 256 MB 的缓冲区正在耗尽,但我没有从 meminfo 获得任何信息。 meminfo 中的一切看起来都正常且免费。
所有固定/取消固定的内存分配/释放都是有序且正确的。没有发现任何可能的泄漏。
此外,此问题仅发生在非页面对齐的 buf 中。如果使用 valloc 而不是 malloc,则不会发生此问题。 使用 mmap 分配的页面对齐缓冲区也通过,没有错误。
非常感谢任何类型的指示或帮助。
请注意,此驱动程序适用于其他平台(x86_64、arm64(NVidia Jetson、IMX8))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。