Estoy trabajando en el controlador FPGA para kernel de Linux. El código parece funcionar bien en x86, pero en x86_64 tengo algunos problemas. Implementé DMA de transmisión. Por lo tanto, va comoStreaming DMA en el controlador de kernel PCIE Linux
get_user_pages(...);
for (...) {
sg_set_page();
}
pci_map_sg();
Pero pci_map_sg
regresaron direcciones como 0xbd285800
, que no están alineados por PAGE_SIZE
, por lo que no puede enviar la página completa primero, porque la especificación PCI Express dice
"Las solicitudes no deben especificar una combinación de Dirección/Longitud que causa un acceso al Espacio de Memoria para cruzar un límite de 4 KB. "
¿Hay alguna forma de obtener direcciones alineadas, o acabo de perder algo importante?
¿Se puede incluir código de su fuente real? No hay suficiente allí para detectar el error. –
Sí, por supuesto. Adjunto a la publicación original. – soh
@soh: ¿Hay algún plan para lanzarlo al público? Estaba buscando un controlador abierto y no pude encontrar uno bueno. Siendo demasiado perezoso para escribir el mío, estaría más que contento de contribuir y ayudar con las pruebas. –