阅读:2927回复:5
版主求助,PCI驱动ISR里使用KeSetEvent死锁疑问
版主好,求求帮帮我,
驱动设计是这样的,启动一次数据DMA传输,传输完成以后,在DMA完成中断的中断服务例程ISR中调用KeSetEvent,触发事件,主线程KeWaitForSingleObject函数响应。 现在的问题是,运行一段时间后2分钟左右 主线程运行到KeWaitForSingleObject函数就死锁(现象:系统死机,不重启、不蓝屏、CPU不是100%) 分析快一个星期了,没有找到原因,帮帮我,谢谢谢谢 |
|
沙发#
发布于:2009-10-02 01:54
代码发给我看看
nemoon4105@gmail.com |
|
|
板凳#
发布于:2009-10-23 20:26
If Wait is set to FALSE, the caller can be running at IRQL <= DISPATCH_LEVEL. Otherwise, callers of KeSetEvent must be running at IRQL = PASSIVE_LEVEL and in a nonarbitrary thread context.
KeSetEvent 不应该在ISR中调用 |
|
地板#
发布于:2009-10-24 22:20
回 2楼(iwasmu) 的帖子
谢谢您热心回帖,通过以上机制来同步可能还存在问题,我见过很多人这么用都有问题,即使把KeSetEvent 放在中断延迟调用里也是一样, 现在采用多加入一个队列的方法,把处理以后的IRP放入另外一个队列, 等待DMA中断以后,从该队列中取出IRP ,完成IRP , 结果很好, 再次谢谢你 |
|
地下室#
发布于:2009-11-16 16:11
请问楼主加入队列用什么函数啊,我现在也遇到类似问题.
|
|
5楼#
发布于:2009-11-17 10:16
搭车问一下啊,我采用的是write queue。
WriteDispatch/WriteQueueStartio 和DpcForIsr 的代码执行经常相互打乱。 为什么会这样呢? 为什么优先级高的代码会被打乱呢? |
|