【发布时间】:2012-03-12 00:00:20
【问题描述】:
我正在为 Linux 内核开发 FPGA 驱动程序。代码似乎在 x86 上运行良好,但在 x86_64 上我遇到了一些问题。我实现了流式 DMA。就这样
get_user_pages(...);
for (...) {
sg_set_page();
}
pci_map_sg();
但是pci_map_sg返回的地址如0xbd285800,与PAGE_SIZE不对齐,所以我不能发送完整的第一页,因为PCIE规范说
"请求不能指定地址/长度组合,这会导致 跨越 4 KB 边界的内存空间访问。”
有什么方法可以得到对齐的地址,还是我错过了一些重要的事情?
【问题讨论】:
-
你能包含你真实来源的代码吗?那里不足以发现错误。
-
是的,当然。附于原帖。
-
@soh:有计划向公众发布它吗?我正在四处寻找一个开放的驱动程序,但找不到一个好的驱动程序。懒得自己写,我很乐意为测试做出贡献和帮助。
-
@Vlad Lazarenko:如果你还有兴趣,我想在项目结束后我可以分享代码。
-
您好,请尝试为 64 位 dma_set_mask 正确设置您的 DMA 掩码