Win10 1809版本中的PCI驱动程序DMA BSOD

时间:2018-10-16 00:18:13

标签: driver

我们有一个定制的PCIe卡,用于从设备捕获图像数据。我们开发了一种WDM驱动程序,该驱动程序从Win7 64位到Win10 1703 64位都可以正常工作。现在我们需要升级到Win10 1809版本,并获得了DPC_WATCHDOG_VIOLATION(133)BSOD。

转储文件显示:

DPC_WATCHDOG_VIOLATION (133)
The DPC watchdog detected a prolonged run time at an IRQL of DISPATCH_LEVEL
or above.
Arguments:
Arg1: 0000000000000000, A single DPC or ISR exceeded its time allotment. The offending
              component can usually be identified with a stack trace.
Arg2: 0000000000000501, The DPC time count (in ticks).
Arg3: 0000000000000500, The DPC time allotment (in ticks).
Arg4: fffff80644d5c380, cast to nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, which contains
              additional information regarding this single DPC timeout

stack:
00 fffff806`46eb6ba8 fffff806`44a9b667 nt!KeBugCheckEx
01 fffff806`46eb6bb0 fffff806`44910a4f nt!KeAccumulateTicks+0x1875a7
02 fffff806`46eb6c10 fffff806`4480347c nt!KeClockInterruptNotify+0xcf
03 fffff806`46eb6f30 fffff806`4497ba15 hal!HalpTimerClockIpiRoutine+0x1c
04 fffff806`46eb6f60 fffff806`44a4a92a nt!KiCallInterruptServiceRoutine+0xa5
05 fffff806`46eb6fb0 fffff806`44a4ae77 nt!KiInterruptSubDispatchNoLockNoEtw+0xfa
06 fffff806`46ea7490 fffff806`448234e4 nt!KiInterruptDispatchNoLockNoEtw+0x37
07 fffff806`46ea7620 fffff806`448254ea hal!HalpDmaGetAdapterCacheAlignment+0x4
08 fffff806`46ea7650 fffff806`44823589 hal!HalpDmaNextContiguousPieceV2+0x2e
09 fffff806`46ea7690 fffff806`4481a01b hal!HalpDmaNextContiguousPiece+0x49
0a fffff806`46ea76d0 fffff804`99011b50 hal!HalPutScatterGatherList+0x164bb
**0b fffff806`46ea7740 fffff806`448fada7 ourdriver!DpcForIsr+0x510 [c:\isr_dpc.cpp @ 893]** 
0c fffff806`46ea7810 fffff806`448fa3ee nt!KiExecuteAllDpcs+0x2e7
0d fffff806`46ea7950 fffff806`44a4c94a nt!KiRetireDpcList+0x1ae
0e fffff806`46ea7b60 00000000`00000000 nt!KiIdleLoop+0x5a

我们的驱动程序文件isr_dpc.cpp的@ 893行是

devExt->ReadAdapter->DmaOperations->PutScatterGatherList(devExt->ReadAdapter, devExt->ReadScatterGatherList, FALSE);
devExt->ReadScatterGatherList = NULL;

似乎PutScatterGatherList()函数调用无法完成并且需要很长时间。

我真的不知道如何解决此问题。从Win7到Win10 1703,使用该驱动程序已经十年没有问题。但是,在最新的Win10 1809版本中,我们获得了BSOD。我不知道这是我们驱动程序的问题,还是Win10 1809有一些不可思议的设置(例如安全策略)来阻止DMA传输。有人可以帮助我吗?任何帮助,意见或建议表示赞赏。

0 个答案:

没有答案