可以在Linux设备驱动程序等待一个DMA在device_remove()函数终止?
-
26-09-2019 - |
题
我写为一个PCI设备Linux设备驱动程序。该设备执行DMA操作。当该程序的DMA操作运行时崩溃的问题出现。
实际上,崩溃的情况下,device_remove()
函数由系统调用(仿佛close()
被称为)。这个函数由所述PCI设备所使用的存储器区域中的清理,正确地释放所分配的存储器。我的意思是它正常工作正常的情况下。
但是,如果DMA正在运行,当它实际上将终止,也不会是能够执行DMA清理,因为它不能访问了对已释放了设备数据。一个简单的解决办法是在接近()函数来等待。 (这是我的理解,但也许永远不会执行的DMA功能的最后一部分?)的
这是个好主意,哀号的DMA在device_remove()
实际终止(又名close()
)的设备驱动程序的功能?还有没有其他的手段来解决这个问题?
解决方案
是的,等待应该工作,但:
除非你想你的PCI设备的测试意外删除的行为,我想打电话给删除()当你有DMA从设备能上/应该失败。另外,我不认为close()方法可以治疗同样的方式删除()。后者将要从存储器完全删除所有设备相关的数据结构(例如:看到网络设备驱动程序中的一个)。因此,换句话说,我所想说的是:等待()上接近(),但不能()上删除()
另外根据您的情况,您可能也想看看的为设备相关的资源的释放引用计数。
不隶属于 StackOverflow