tqijin
驱动小牛
驱动小牛
  • 注册日期2006-07-04
  • 最后登录2013-11-21
  • 粉丝3
  • 关注0
  • 积分31分
  • 威望1060点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
阅读:2927回复:5

版主求助,PCI驱动ISR里使用KeSetEvent死锁疑问

楼主#
更多 发布于:2009-09-29 10:23
版主好,求求帮帮我,
驱动设计是这样的,启动一次数据DMA传输,传输完成以后,在DMA完成中断的中断服务例程ISR中调用KeSetEvent,触发事件,主线程KeWaitForSingleObject函数响应。
现在的问题是,运行一段时间后2分钟左右
主线程运行到KeWaitForSingleObject函数就死锁(现象:系统死机,不重启、不蓝屏、CPU不是100%)

分析快一个星期了,没有找到原因,帮帮我,谢谢谢谢
xp4105
论坛版主
论坛版主
  • 注册日期2006-04-02
  • 最后登录2014-03-29
  • 粉丝1
  • 关注0
  • 积分905分
  • 威望570点
  • 贡献值1点
  • 好评度162点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2009-10-02 01:54
代码发给我看看
nemoon4105@gmail.com
时光如流水 抓紧时间实现自我价值
iwasmu
驱动牛犊
驱动牛犊
  • 注册日期2007-08-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望52点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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中调用
tqijin
驱动小牛
驱动小牛
  • 注册日期2006-07-04
  • 最后登录2013-11-21
  • 粉丝3
  • 关注0
  • 积分31分
  • 威望1060点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-10-24 22:20
回 2楼(iwasmu) 的帖子
谢谢您热心回帖,通过以上机制来同步可能还存在问题,我见过很多人这么用都有问题,
即使把KeSetEvent 放在中断延迟调用里也是一样,
现在采用多加入一个队列的方法,把处理以后的IRP放入另外一个队列,
等待DMA中断以后,从该队列中取出IRP ,完成IRP ,
结果很好,
再次谢谢你
zkme
驱动牛犊
驱动牛犊
  • 注册日期2008-06-18
  • 最后登录2010-01-03
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-11-16 16:11
请问楼主加入队列用什么函数啊,我现在也遇到类似问题.
vaccy
驱动牛犊
驱动牛犊
  • 注册日期2005-12-01
  • 最后登录2009-12-09
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望211点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2009-11-17 10:16
搭车问一下啊,我采用的是write queue。
WriteDispatch/WriteQueueStartio 和DpcForIsr 的代码执行经常相互打乱。
为什么会这样呢?
为什么优先级高的代码会被打乱呢?
游客

返回顶部