Я работаю над драйвером FPGA для ядра Linux. Код вроде бы работает нормально на x86, но на x86_64 у меня есть некоторые проблемы. Я реализовал потоковый DMA. Это происходит так
get_user_pages(...);
for (...) {
sg_set_page();
}
pci_map_sg();
Но pci_map_sg
возвращает адреса типа 0xbd285800
, которые не выровнены по PAGE_SIZE
, поэтому я не могу отправить полную первую страницу, потому что спецификация PCIE говорит
"Запросы не должны указывать комбинацию адрес/длина, которая заставляет доступ к пространству памяти пересекает границу в 4 КБ."
Есть ли способ получить выровненные адреса, или я просто упустил что-то важное?