テクニカル ドキュメント #64



Doc ID: 64
製品: WinDriver
Version:  8.01 およびそれ以下

Linux の連続バッファ DMA の割り当て - 128KB の制限

注意: WinDriver version 8.02 から、Linux 上で WinDriver を使用して、128KB 以上の連続 DMA バッファの割り当てが可能となります。 以下の情報は、WinDriver v8.01 およびそれ以下のバージョンに当てはまります。

Linux で、デフォルトでは、128KB しか連続 DMA カーネル バッファを割り当てることができません。[[Linux での、Scatter/Gather DMA の実行に関しては、テクニカル ドキュメント #47 を参照してください]。

カーネルをリコンパイルして、より大きいサイズを取得することができます。
bigphysarea パッチを探して、そのパッチで、128KB 以上のバッファの DMA を割り当てられます。
Linux カーネルのコードをダウンロードできます (関連ファイル /usr/src/linux/mm/slab.c ; cache_sizes struct 構造体を探します) 、コードを参照して、Linux-kernel の会議室に参加して詳細情報を取得できます。
ただし、開発元では上記のパッチの動作検証をしてないので、最大 DMA バッファの割り当てのサイズの作成に関する問題には、いかなるサポートも提供いたしませんので、ご了承ください。

カーネルをリコンパイルして、128KB より大きく DMA バッファを割り当てる場合、linux_wrappers.c の LINUX_kmalloc() 関数の実装を変更する必要があります。128KB 以上の割り当てサイズを要求すると、現在の実装では、NULL を返します。bigphysarea パッチを使用すると、LINUX_kmalloc() 関数のパッチから関連する関数を呼ぶ必要があります。