Linuxに関する質問です(ドライバ関連)。大規模な DMA アクセスを実行できるハードウェアがあるとします (マルチメガバイトの読み取りまたは書き込み。CUDA カードまたはネットワーク カードを思い浮かべるかもしれません)。デバイスとの間で転送されるデータは、ユーザー空間に割り当てられ、ユーザー空間に配置されます。
mlock()
ということで、DMAでアクセスするメモリ範囲が正しいと思います。次に、ユーザー プロセスがドライバーを呼び出して DMA 転送を開始します。転送が開始された後、私のユーザー空間プロセスはまだ他のスレッドで動作しています。
しばらくして、データが転送されたと思われるときに、munlock()
ユーザー空間スレッドからメモリ範囲を実行したいと思います。
それは合法ですか?munlock()
実際の DMA 転送が終了する前に呼び出したらどうなりますか?
これはmunlock()
成功するか失敗するか?それとも、DMA 転送が完了するまでブロックしますか?
PS:質問はSO の id13422、Zan Lynx からのものです。