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 境界を越える原因となるアドレス/長さの組み合わせを指定してはなりません。」
アラインされたアドレスを取得する方法はありますか、それとも重要なことを見逃しただけですか?