Dónde comenzar a aprender sobre Linux DMA / controladores de dispositivos / asignación de memoria

Estoy portando / depurando un controlador de dispositivo (que es utilizado por otro módulo del kernel) y enfrento un callejón sin salida porque dma_sync_single_for_device () falla con un kernel oops.

No tengo idea de qué se supone que debe hacer esa función y buscar en Google realmente no ayuda, por lo que probablemente necesito aprender más sobre estas cosas en total.

La pregunta es, ¿por dónde empezar?

Ah, sí, en caso de que sea relevante, se supone que el código se ejecuta en un PowerPC (y el Linux es OpenWRT)

EDITAR: Recursos en línea preferibles (los libros tardan unos días en ser entregados :)