我可以在dma_sync_single_for_cpu之后调用dma_unmap_single吗?

Chi*_*nna 5 c device-driver linux-device-driver linux-kernel dma

我有一个情况我需要调用dma_unmap_singledma_sync_single_for_cpu.以下是我的情景.

  1. 使用分配缓冲区的内存 kmalloc()
  2. 映射使用缓冲到设备dma_map_singleDMA_FROM_DEVICE方向.
  3. 收到数据包后,使用获取缓冲区所有权dma_sync_single_for_cpu.
  4. 经过一段时间后,如果内核中的其他一些函数使用相同的缓冲区,则从设备中使用dma_unmap_singleDMA_FROM_DEVICE方向的unmap缓冲区.

以上所有步骤都可以接受吗?

CL.*_*CL. 1

缓冲区“所有权”(CPU 或设备)仅在决定谁可以访问缓冲区内容时才重要。

dma_unmap_single()不关心内容;它可以在任一状态下调用。

请注意,DMA 取消映射后,内存再次“属于”CPU。如果您只进行一次 DMA 传输,则无需调用dma_sync_single_for_cpu(); 您可以在调用后读取缓冲区dma_unmap_single()