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

时间:2015-12-18 06:45:01

标签: c linux-kernel linux-device-driver device-driver dma

我有一种情况需要在dma_unmap_single之后致电dma_sync_single_for_cpu。以下是我的情景。

  1. 使用kmalloc()
  2. 为缓冲区分配内存
  3. 使用dma_map_single方向使用DMA_FROM_DEVICE将缓冲区映射到设备。
  4. 收到数据包后,使用dma_sync_single_for_cpu获取缓冲区所有权。
  5. 一段时间后,如果内核中的某些其他函数使用相同的缓冲区,则使用dma_unmap_single方向从设备取消映射缓冲区。
  6. 以上所有步骤都可以接受吗?

1 个答案:

答案 0 :(得分:1)

缓冲区"所有权" (CPU或设备)仅用于决定允许谁访问缓冲区的内容。

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

请注意,在DMA取消映射后,内存再次出现"属于#34;到CPU。如果您只进行一次DMA传输,则无需致电dma_sync_single_for_cpu();你可以在dma_unmap_single()电话后阅读缓冲区。