我为 PCI 设备编写了 Linux 设备驱动程序。该设备执行 DMA 操作。当 DMA 操作运行时程序崩溃时会出现问题。
实际上,当崩溃时,该device_remove()
函数被系统调用(就像close()
被调用一样)。该函数对 PCI 设备使用的内存区域进行清理,正确释放分配的内存。我的意思是它在正常情况下可以正常工作。
但是,如果 DMA 正在运行,当它实际终止时,它将无法执行 DMA 清理,因为它不再有权访问已释放的设备数据。一个简单的解决方案是在 close() 函数中等待。(这是我的理解,但也许DMA函数的最后一部分永远不会执行?)
device_remove()
为 DMA 实际终止设备驱动程序的(aka close()
) 功能而哀号是个好主意吗?有没有其他方法来处理这个问题?