"); //--> 土的行业有什么工作| 百花齐放是什么生肖| 向日葵花语是什么| 梦见抓蛇是什么预兆| n字鞋子是什么牌子| 属牛幸运色是什么颜色| 心脏病挂什么科| 瞳字五行属什么| 前列腺炎是什么| 甲亢吃什么好的更快| 黑脚鸡是什么品种| 弥补是什么意思| 粿是什么意思| 经常吃海带有什么好处和坏处| 皮肤松弛是什么原因造成的| 宫内感染有什么症状| 什么钓鱼愿者上钩| 代言是什么意思| 为什么总长火疖子| 君子兰叶子发黄是什么原因| mid什么意思| 中午吃什么饭家常菜| 玄武岩属于什么岩石| camel什么意思| 胸椎退行性变什么意思| 牙齿上白色斑块是什么| 月经一直不停有什么办法止血| 天天喝奶茶有什么危害| 五行大林木是什么意思| 猫肉什么味道| 火水是什么| 瘪嘴是什么意思| 气短是什么原因| 夏天为什么要吃姜| 灵魂摆渡人是什么意思| 胩是什么意思| 什么病会引起皮肤瘙痒| 蜘蛛痣是什么| 骨质增生吃什么药好| 熊猫为什么被称为国宝| 竖中指是什么意思| 膈肌痉挛是什么症状| 西洋参补什么| 93年的鸡是什么命| 纳是什么意思| kako是什么牌子| bb是什么意思| 牛肉用什么炒好吃| 什么叫脘腹胀痛| 肿瘤指标偏高什么意思| 体检要带什么| 磷是什么元素| 肝内强回声是什么意思| 喉咙长溃疡是什么原因| 前列腺吃什么药| 颞下颌关节挂什么科| 黄芪的作用是什么| 现在买什么股票好| 全日制专科是什么意思| 生姜泡水喝有什么好处| 印第安老斑鸠什么意思| 羊水污染是什么原因造成的| 下午四点到五点是什么时辰| 做梦房子倒塌什么预兆| 女生喝红牛有什么影响| 午夜是什么意思| 等离子是什么| 狐臭什么味| 来月经吃什么水果| 眼睛有点模糊是什么原因| 什么是姑息治疗| 欧巴桑是什么意思| 吃什么补维生素b6| 大便粘便池是什么原因| 吃什么可以长头发| 肠系膜淋巴结炎吃什么药| 脚气用什么泡脚| 高血压吃什么食物好| 不举是什么原因造成的| 什么是超标电动车| 炖排骨放什么调料| 走青是什么意思| 为什么做b超要憋尿| 载脂蛋白b偏高是什么意思| 异常白细胞形态检查是查什么病| 阿斯利康是什么药| 宫保鸡丁属于什么菜系| 儿童发育过早应该挂什么科| 百香果的籽有什么功效| 血糖高喝什么牛奶好| 做什么行业最赚钱| 什么情况下要做肌电图| 中阴身是什么意思| 澳门有什么好玩的| 只要睡觉就做梦是什么原因| 来月经头晕是什么原因| 老人怕冷是什么原因| 尿液可以检查出什么| 2021年属什么| 腮边长痘是什么原因| 女人银屑病一般都长什么地方| 贫血什么症状| 3月18日什么星座| 西瓜禁忌和什么一起吃| 什么争鸣成语| 怀孕都有什么症状| 农历9月11日是什么星座| 梦见野猪是什么预兆| 知了是什么| 肝囊肿是什么原因造成的| 什么是邪淫| 电饭煲什么内胆最好| 轻度抑郁有什么症状| 龙和什么属相最配| ca医学代表什么意思| 723是什么意思| 减肥期间可以吃什么水果| 芦荟有什么功效与作用| 多多益善什么意思| 大枕大池是什么意思| 什么姿势最舒服| 心脏病是什么症状| 麻风病是什么病| h型高血压什么意思| 美国为什么有哥伦比亚| 什么是丹凤眼| 牛肉丸子配什么菜好吃| 看淡是什么意思| 吃什么最补血| 腰椎疼痛挂什么科| 腹部增强ct能检查出什么| 过敏性鼻炎喝什么茶好| 308是什么意思| 出煞是什么意思| 奥美拉唑治什么胃病| 手经常抽筋是什么原因| 姜不能和什么一起吃| 投桃报李是什么生肖| camus是什么酒| 不爱说话的人是什么性格| 淘米水洗脸有什么作用与功效| 什么样的春光| 摩羯座喜欢什么样的女生| 教学相长是什么意思| 下午七点是什么时辰| a型血与o型血生的孩子是什么血型| 玉米有什么功效| 手指头抽筋是什么原因| 例假量少是什么原因| 肚子一直咕咕叫是什么原因| 取关是什么意思| 爵是什么器皿| 龛影是什么意思| 胃酸过多是什么原因造成的| 乳房疼挂什么科室| 不满是什么意思| 什么东西掉进水里不会湿| 吃什么东西补血最快| 降压药什么时间吃最好| 乙肝e抗体阳性是什么意思| 感化是什么意思| 6朵玫瑰代表什么意思| 一代明君功千秋是什么生肖| 宫腔少量积液是什么意思| 脚背抽筋是什么原因引起的| 赛字五行属什么| 姑姑的老公叫什么| 五行什么生火| 一什么知什么| 产检都检查什么项目| 中国红是什么颜色| 慢性胃炎伴胆汁反流是什么意思| 什么时候冬天| 耳鸣吃什么药最好| 人有三急指的是什么| 练八段锦有什么好处| 舌苔厚白湿气重吃什么药| 朱元璋为什么杀蓝玉| 用什么药可以缩阴紧致| 二垒是什么意思| 情商低是什么意思| 药物制剂是干什么的| 屈光和近视有什么区别| 百家姓第一个姓是什么| 大葱炒什么好吃| 风热感冒吃什么药好| 调侃什么意思| 宠物医院需要什么资质| 避孕套有什么危害| 拔完智齿第三天可以吃什么| 高笋和茭白有什么区别| 一到晚上就咳嗽是什么原因| 保育费是什么意思| 白化病是什么遗传| 左眼皮跳跳好事要来到是什么歌| 正常人尿液是什么颜色| 正厅级是什么级别| 吃什么能减肥最快还能减全身| 尿带血是什么原因| 水泡用什么药膏最有效| 螯合剂是什么| urea是什么意思| 七月八日是什么日子| 解脲支原体阳性是什么意思| 负离子是什么东西| 皿是什么意思| 年柱亡神是什么意思| ccs是什么意思| 合欢树为什么叫鬼树| 皮肤糖化是什么意思| 兰花什么时候开| 518是什么星座| 为什么会得玫瑰糠疹| 怀孕肚子疼是什么原因| 阑尾炎手术后吃什么好| 翳什么意思| 尿结石什么症状| 牙龈有点发黑是什么原因| 怀才不遇是什么意思| 梦到拆房子是什么意思| 备孕要注意什么| 单核细胞百分比偏高说明什么| 身是什么结构的字| 肝什么相照| 小孩经常吐是什么原因| 腰椎间盘突出挂什么科室| 体细胞是什么| 什么叫淋巴结转移| 吃维生素b1有什么好处和副作用| 钼靶检查是什么意思| 总胆固醇高吃什么药| 什么人不洗澡| 孕妇吃什么对胎儿好| 消化腺包括什么| 1月18是什么星座| 狼吞虎咽的意思是什么| 复苏是什么意思| 吃什么补肾最快最有效| 溺爱什么意思| 孕妇不能吃什么| 肩膀疼是什么原因引起的| 喝茶拉肚子是什么原因| 干什么挣钱快| 拜阿司匹灵是什么药| 发扬什么精神| 县政府党组成员什么级别| 始终如一是什么意思| 孤单是什么意思| 开除是什么意思| media是什么意思| 五行金是什么颜色| 007最新一部叫什么| 加尿素起什么作用| 什么菜好吃| 香精是什么东西| 什么水果助消化| 耳朵后面是什么穴位| 鲶鱼效应是什么意思| 1994年五行属什么| 梦见好多猫是什么意思| furk是什么意思| 米非司酮片是什么药| 什么是糙米| 为什么风团会在晚上爆发| 百度
新闻  |   论坛  |   博客  |   在线研讨会
PCIe接口驱动 中断寄存器被覆盖问题的发现与解决
FPGA小师兄 | 2025-08-04 18:50:29    阅读:13411   发布文章

最近调试Windows平台下的PCIe网络驱动程序时,发现了中断不被处理的情况,怀疑中断丢失。随后在调试过程中将问题定位在如下两个方面。

DMA写重复启动

我们在Windows下使用WDF框架开发PCIe驱动的DMA读写功能。驱动要启动一次DMA传输包括两个步骤

  • 初始化DMA传输对象

  • 执行DMA传输

初始化DMA传输对象时,应将本次DMA要传输的数据缓冲区的地址和长度写入该对象,并向其注册用于配置并启动DMA传输的回调函数PCIeEvtProgramWriteDma。该回调函数会获取缓冲区地址和长度,通过PIO方式配置PCIe Bar空间上的寄存器,以通知硬件启动DMA传输。

执行DMA传输时,驱动仅需调用WDF框架的WdfDmaTransactionExecute函数,操作系统就会调用上一步注册的回调函数对硬件进行配置并启动DMA传输。

正常来讲,驱动调用一次WdfDmaTransactionExecute函数,相应地操作系统应调用一次回调函数进行硬件配置。但我们更换硬件平台(CPU+FPGA)后,DMA写流程出现了严重问题,具体表现为:前者的一次调用可能会对应着后者的多次调用,且每次回调函数都会完整执行并触发DMA写完成中断,从而造成了驱动的中断状态机被打乱,直接表现是后续的DMA写开始中断丢失,无法正常启动DMA写。

如下,图1是驱动调用WdfDmaTransactionExecute函数的次数与操作系统调用回调函数的次数不一致的截图。

图1 DebugMonito监测

其中,5658(5576+82+0)为驱动调用WdfDmaTransactionExecute函数的次数,5664为操作系统调用回调函数的次数。二者之间差6就是操作系统重复调用的次数。

我们尝试将操作系统多出来的调用回调函数的次数跳过,即仅保留第一次调用。硬件侧可以正常完成这次DMA传输,并触发DMA写完成中断。但驱动去查询DMA传输对象时,发现此次DMA传输并未处于完成状态,即无法正常接收数据。至此,我们猜测,操作系统多次调用回调函数的原因是其认为配置过程出错才重新进行配置,直至最后一次成功。而硬件侧并不会感知到这种错误,每次都正常启动DMA写并触发DMA写完成中断,导致驱动的中断状态机跑飞。

问题排查到这里,我们无法深入到闭源的Windows操作系统内部去探究错误原因了。所以思路一转,我们尝试能否为中断状态机提供一些保障机制。

驱动的中断状态机

为了方便调试,我们在中断处理程序中添加了许多关键的调试日志信息,结果在其中发现了端倪。

图2 日志打印记录

观察图2中的日志,发现两个中断延迟处理函数MPHandleInterrupt在并行执行。在这个过程中,用于临时拷贝中断寄存的变量Adapter->IsrCode_dpc被覆盖重写。覆盖的直接后果是,前者已读取到的寄存的中断,后者覆盖后就无法由中断延迟处理程序进行处理。

这种现象显然是不合理的。为了解决这个问题,我们为MPHandleInterrupt函数内部加锁,防止MPHandleInterrupt并行执行。通过这种方式,中断寄存被覆盖的现象不再发生。

全文完。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
专注网络与交换领域的FPGA实现和芯片化,如TSN、TTE等
推荐文章
最近访客
口嫌体正直是什么意思 什么汤好喝又简单 腰痛去医院挂什么科 吃酸的有什么好处 奥司他韦是什么药
直接胆红素偏高是什么意思 血小板高有什么危害 省委副书记什么级别 祛是什么意思 父亲节出什么生肖
阴唇为什么一个大一个小 心功能iv级是什么意思 七一年属什么生肖 椁是什么意思 脚气看什么科
7月26日是什么星座 ffa是什么意思 萎缩性胃炎吃什么药能治好 贫血吃什么 缺钙吃什么食物
拉肚子不能吃什么食物hcv8jop9ns4r.cn pn是什么hcv9jop4ns0r.cn 扁桃体肿大吃什么药hcv9jop3ns2r.cn 胃不好吃什么养胃水果hcv8jop8ns4r.cn 身上长肉疙瘩是什么原因96micro.com
乙肝e抗体高是什么意思hcv8jop9ns1r.cn 巾帼指什么shenchushe.com 什么是内分泌失调hcv7jop4ns6r.cn 如来佛祖和释迦牟尼是什么关系hcv7jop7ns4r.cn 36d是什么意思hcv8jop7ns1r.cn
沉贵宝是什么木hcv8jop3ns8r.cn 林彪为什么要叛逃hcv8jop8ns4r.cn 姨妈有血块是什么原因hcv8jop9ns6r.cn 补肾壮阳吃什么药效果好hcv9jop0ns2r.cn 是什么东西1949doufunao.com
花都有什么花hcv9jop6ns6r.cn 腿抖是什么病的预兆hcv8jop9ns1r.cn 饭后打嗝是什么原因creativexi.com 海盐是什么盐hcv7jop9ns1r.cn 什么叫糙米hcv7jop9ns0r.cn
百度