dma_set_coherent_maskとdma_set_mask_and_coherentの違いについて
dma_set_coherent_mask
とdma_set_mask_and_coherent
の違いについて説明します。
dma_set_coherent_mask
関数は、デバイスがサポートするキャッシュコヒーレントなDMAアドレスの範囲を設定します。この関数は、デバイスがサポートするコヒーレントなDMAアドレスのマスクを指定することができます。
一方、dma_set_mask_and_coherent
関数は、デバイスがサポートするDMAアドレスの範囲を設定すると同時に、キャッシュコヒーレント(一貫性)を保証するようにDMA操作を設定します。これにより、デバイスがサポートするDMAアドレスの範囲が、ストリーミングDMA操作とコヒーレントなDMA操作の両方に適用されます。
要するに、dma_set_coherent_mask
関数はキャッシュコヒーレントなDMAアドレスの範囲のみを設定し、dma_set_mask_and_coherent
関数はストリーミングDMA操作とコヒーレントなDMA操作の両方に適用されるDMAアドレスの範囲を設定します。
Q. dma_set_mask_and_coherentはCPUキャッシュをOFFにするのでしょうか?
A. dma_set_mask_and_coherentは、デバイスがサポートするコヒーレントなDMAアドレスのマスクを指定することができます。一方、dma_set_mask_and_coherent関数は、デバイスがサポートするDMAアドレスの範囲を設定すると同時に、キャッシュコヒーレント(一貫性)を保証するようにします1。つまり、CPUキャッシュをOFFにするわけではありません。
Q. 誰が保証するように調整するのでしょうか?
A. Linuxカーネルが保証するように調整されます。