Re: 64-bit system hang in KiInterruptDispatch

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance



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
>


.



Relevant Pages

  • Re: SMSC91C111 interrupt service routine
    ... I disconnect the chip from the network and it passed ... the SMSC driver activates the ... you enable device interrupt you get an interrupt event (for frames in RX ... I tried to put a breakpoint at the beginning of the ...
    (microsoft.public.windowsce.platbuilder)
  • Re: 2.6.19 and up to 2.6.20-rc2 Ethernet problems x86_64
    ... If the system fails in ACPI mode, but works in non-ACPI mode, ... Using ACPI for SMP configuration information ... Using IOAPIC for interrupt routing ... Non-volatile memory driver v1.2 ...
    (Linux-Kernel)
  • Re: [PATCH] uio: User IRQ Mode
    ... This patch adds a "User IRQ Mode" to UIO. ... In this mode the user space driver ... is responsible for acknowledging and re-enabling the interrupt. ...
    (Linux-Kernel)
  • [PATCH 06/13] Char: cyclades, overall cleanup
    ... * Prevent users from opening non-existing Z ports. ... * Implemented full support for non-standard baud rates. ... * Driver now reports physical instead of virtual memory addresses. ... * Fixed SMP locking in Cyclom-Y interrupt handler. ...
    (Linux-Kernel)
  • [PATCH 13/79] cyclades: overall cleanup
    ... * Prevent users from opening non-existing Z ports. ... * Implemented full support for non-standard baud rates. ... * Driver now reports physical instead of virtual memory addresses. ... * Fixed SMP locking in Cyclom-Y interrupt handler. ...
    (Linux-Kernel)