2015-12-18 11 views
5

dma_unmap_singleの後にdma_sync_single_for_cpuの後に電話する必要がある状況があります。以下は私のシナリオです。dma_sync_single_for_cpuの後にdma_unmap_singleを呼び出すことはできますか?

  1. kmalloc()
  2. を使用してバッファメモリを割り当てるDMA_FROM_DEVICE方向とdma_map_singleを使用してデバイスにバッファの地図。
  3. パケットを受信した後、dma_sync_single_for_cpuを使用してバッファの所有権を取得します。
  4. 同じバッファを使用するカーネルの他の機能がある場合は、dma_unmap_singleDMA_FROM_DEVICEの方向を使用してデバイスからバッファをアンマップします。

上記の手順はすべて受け入れられますか?

+0

DMAマップAPIはアドレス空間に関するもので、IOMMUが使用されているときにバウンスバッファとしての副作用がある可能性があります。説明した手順は、そのバッファへのアクセスに関してすべてがシリアル化されていれば問題ありません。 – 0andriy

答えて

1

バッファ "所有権"(CPUまたはデバイス)は、バッファの内容にアクセスできるユーザーを決定するためにのみ重要です。

dma_unmap_single()内容は気にしません。どちらの状態でも呼び出すことができます。

DMAのマッピング解除後、メモリは再びCPUに属します。 1回のDMA転送しか行っていない場合は、dma_sync_single_for_cpu()に電話する必要はありません。 dma_unmap_single()コールの後にバッファを読み取ることができます。

関連する問題