Re: 64-bit system hang in KiInterruptDispatch
- From: "Alexander Grigoriev" <alegr@xxxxxxxxxxxxx>
- Date: Fri, 13 Jan 2006 19:18:36 -0800
Are you sharing interrupts in X64 system, by any chance? Are you correctly
handling shared interrupts (check if it's you device's interrupt)?
"Nathan G" <NathanG@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
news:DD1226DE-C4DA-4F88-AB31-585358AA0432@xxxxxxxxxxxxxxxx
> Hello,
>
> Perhaps this is too detailed a question to ask here, but I'll try.
>
> We have a driver for a PCI device which works fine on x86 Windows, but on
> x64 Windows 2003, we suffer system hangs/freezes.
>
> Using the kernel debugger, I've discovered the following things upon
> causing
> a break.
>
> When the hang occurs, we could be in any of various places in the driver.
> There does not seem to be any infinite loop. In addition, if I continue
> and
> break again, the system never advances any further in the execution of our
> driver.
>
> When I break, the top items of the call stack are always related to the
> break and a clock interrupt, which is fine. Ultimately it gets
>
> nt!RtlpBreakWithStatusInstruction
> ...
> hal!HalpClockInterrupt+0xa8
> nt!KiInterruptDispatchNoLock+0x119
> nt!KiInterruptDispatch+0x122 [This one sometimes varies, +0x124, e.g.]
> <our driver>
> ...
>
> What I've seen is that things are still executing within all the timer
> interrupt handling, and the KiInterruptDispatchNoLock will return back to
> KiInterruptDispatch, but that function never returns back to our driver. I
> could see that it kept repeating a loop of 3 instructions within that
> function.
>
> pause
> test qword ptr [rsi],0x1
> jnz nt!KiInterruptDispatch+0x122
>
> On an idle system, I looked at what the stack looks like when
> HalpClockInterrupt is called, and I see this.
>
> hal!HalpClockInterrupt+0xa8
> nt!KiInterruptDispatchNoLock+0x119
> intelppm!C1Halt+0x2
> intelppm!AcpiC1Idle+0x19
> ...
>
> So apparently KiInterruptDispatchNoLock is called under normal conditions,
> but not KiInterruptDispatch.
>
> Finally, I set a breakpoint at KiInterruptDispatchNoLock+122. It is the
> "pause" instruction. Then I went about my business. The breakpoint was not
> being hit. Then I ran my test application. For a while, nothing happened,
> and
> then it hit the breakpoint. Upon removing the breakpoint and continuing,
> it
> seemed the system was indeed hung then.
>
> Can anyone suggest something our driver may have done to cause this
> section
> of KiInterruptDispatch code in to be entered which loops and never exits?
>
> Thanks,
> Nathan
>
.
- Prev by Date: Re: WdfDmaTransactionDelete
- Next by Date: Re: DbgPrint on Windows Vista
- Previous by thread: Re: driver to driver communications
- Next by thread: Re: DbgPrint on Windows Vista
- Index(es):
Relevant Pages
|