我正在为 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 边界的地址/长度组合。”
有没有办法获得对齐的地址,或者我只是错过了一些重要的事情?