Open3

dma_set_coherent_maskとdma_set_mask_and_coherentの違いについて

yonishiyonishi

dma_set_coherent_maskdma_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アドレスの範囲を設定します。

yonishiyonishi

Q. dma_set_mask_and_coherentはCPUキャッシュをOFFにするのでしょうか?

A. dma_set_mask_and_coherentは、デバイスがサポートするコヒーレントなDMAアドレスのマスクを指定することができます。一方、dma_set_mask_and_coherent関数は、デバイスがサポートするDMAアドレスの範囲を設定すると同時に、キャッシュコヒーレント(一貫性)を保証するようにします1。つまり、CPUキャッシュをOFFにするわけではありません。

yonishiyonishi

Q. 誰が保証するように調整するのでしょうか?

A. Linuxカーネルが保証するように調整されます。