Streaming DMA в PCIE linux kernel driver

Я работаю над драйвером FPGA для ядра Linux. Код вроде бы работает нормально на x86, но на x86_64 у меня есть некоторые проблемы. Я реализовал потоковый DMA. Это происходит так

get_user_pages(...);
for (...) {
    sg_set_page();
}
pci_map_sg();

Но pci_map_sg возвращает адреса типа 0xbd285800, которые не выровнены по PAGE_SIZE, поэтому я не могу отправить полную первую страницу, потому что спецификация PCIE говорит

"Запросы не должны указывать комбинацию адрес/длина, которая заставляет доступ к пространству памяти пересекает границу в 4 КБ."

Есть ли способ получить выровненные адреса, или я просто упустил что-то важное?

Исходный код DMA.

6
задан Mohan 10 November 2016 в 14:07
поделиться