LINUX网络子系统中DMA机制的实现_宋宝华的博客-CSDN博客
流式DMA接口
dma_map_*接口
kmalloc、alloc_pages、__get_free_page*()、kmem_cache_alloc()分配的内存
经过 dma_map_single 映射
使用时网卡模型是
dma_sync_single_for_cpu(..., DMA_FROM_DEVICE);
将内存从dma映射内存中拷贝出来
dma_sync_single_for_device(..., DMA_FROM_DEVICE);
解释是使用最新的cpu内存和dma内存,
如何实现的?
dma_sync_single_for_cpu 应该有一步,无效化cpu cache,然后从dma内存中拷出
dma_sync_single_for_device flush cpu cache保证,dma中的内存是最新的,方便后续dma硬件操作