PCI デバイス用の Linux デバイス ドライバーを作成しました。このデバイスは DMA 操作を実行します。DMA 操作の実行中にプログラムがクラッシュすると、問題が発生します。
実際、クラッシュすると、device_remove()
関数はシステムによって呼び出されます (呼び出されたかのようclose()
に)。この関数は、PCI デバイスが使用するメモリ領域をクリーンアップし、割り当てられたメモリを正しく解放します。つまり、通常の状況では正しく機能します。
ただし、DMA が実行されている場合、実際に終了すると、解放されたデバイス データにアクセスできなくなるため、DMA のクリーンアップを実行できなくなります。簡単な解決策は、close() 関数で待機することです。(これは私の理解ですが、DMA関数の最後の部分が実行されることはありませんか?)
DMA がデバイス ドライバのdevice_remove()
(別名) 関数で実際に終了するのを嘆くのは良い考えですか? close()
この問題に対処する他の手段はありますか?