리눅스 커널 용 FPGA 드라이버에서 일하고 있습니다. 코드는 x86에서 잘 작동하는 것처럼 보이지만 x86_64에서는 몇 가지 문제가 있습니다. 스트리밍 DMA를 구현했습니다.PCIE 리눅스 커널 드라이버에서 스트리밍 DMA
get_user_pages(...);
for (...) {
sg_set_page();
}
pci_map_sg();
그러나 pci_map_sg
가 PAGE_SIZE
으로 정렬되지 0xbd285800
같은 주소를 반환, 그래서 전체 첫 페이지를 보낼 수 없습니다처럼 PCIE 사양
"요청이 지정하지해야한다고 때문에 그래서, 간다 메모리 공간 액세스가 4KB 경계를 넘는 주소/길이 조합. "
주소를 정렬하는 방법이 있습니까? 아니면 중요한 것을 놓친 적이 있습니까?
실제 소스의 코드를 포함 할 수 있습니까? 버그를 발견 할만큼 충분하지 않습니다. –
물론입니다. 원래 게시물에 첨부되었습니다. – soh
@soh : 대중에게 공개 할 계획이 있습니까? 나는 열린 드라이버를 찾고 있었고 좋은 드라이버를 찾을 수 없었다. 자신 만의 글을 쓰기에는 너무 게으르므로 테스트에 참여하고 도움을주는 데 기꺼이 나만의 것이 아닙니다. –