Vista BSOD: THREAD_STUCK_IN_DEVICE_DRIVER (BugCheck ea)
Recently, after resuming my Vista laptop from hibernation, I was greeted with a rather strange wait, followed by a blue screen of death. Analysis of the dump yielded the following:
THREAD_STUCK_IN_DEVICE_DRIVER (ea)
The device driver is spinning in an infinite loop, most likely waiting for hardware to become idle. This usually indicates problem with the hardware itself or with the device driver programming the hardware incorrectly.
If the kernel debugger is connected and running when watchdog detects a timeout condition then DbgBreakPoint() will be called instead of KeBugCheckEx()and detailed message including bugcheck arguments will be printed to the
debugger. This way we can identify an offending thread, set breakpoints in it, and hit go to return to the spinning code to debug it further. Because KeBugCheckEx() is not called the .bugcheck directive will not return bugcheck
information in this case. The arguments are already printed out to the kernel debugger. You can also retrieve them from a global variable via
“dd watchdog!g_WdBugCheckData l5″ (use dq on NT64).
On MP machines (OS builds <= 3790) it is possible to hit a timeout when the spinning thread is interrupted by hardware interrupt and ISR or DPC routine is running at the time of the bugcheck (this is because the timeout’s work item can be delivered and handled on the second CPU and the same time). If this is the case you will have to look deeper at the offending thread’s stack (e.g. using dds) to determine spinning code which caused the timeout to occur.
Arguments:
Arg1: 870246b8, Pointer to a stuck thread object. Do .thread then kb on it to find the hung location.
Arg2: 00000000, Pointer to a DEFERRED_WATCHDOG object.
Arg3: 00000000, Pointer to offending driver name.
Arg4: 00000000, Number of times this error occurred. If a debugger is attached, this error is not always fatal — see DESCRIPTION below. On the blue screen, this will always equal 1.Debugging Details:
——————PEB is paged out (Peb.Ldr = 7ffd800c). Type “.hh dbgerr001″ for details
PEB is paged out (Peb.Ldr = 7ffd800c). Type “.hh dbgerr001″ for details
FAULTING_THREAD: 870246b8
DEFAULT_BUCKET_ID: GRAPHICS_DRIVER_FAULT
BUGCHECK_STR: 0xEA
PROCESS_NAME: Ati2evxx.exe
CURRENT_IRQL: 0
LAST_CONTROL_TRANSFER: from 89c2a825 to 81cace97
STACK_TEXT:
a53d7704 89c2a825 000000ea 870246b8 00000000 nt!KeBugCheckEx+0×1e
a53d7748 89c22bfa a53d7794 00000000 89c1d786 dxgkrnl!TdrTimedOperationBugcheckOnTimeout+0×2b
a53d7770 8b5785dc a53d7794 00000000 00000000 dxgkrnl!TdrTimedOperationDelay+0xc9
WARNING: Stack unwind information not available. Following frames may be wrong.
a53d77c0 8b576468 8b670040 a53d785c ffffffff atikmdag+0×255dc
a53d77dc 8b66782c 861bd000 a53d77f8 00000014 atikmdag+0×23468
a53d7838 8b670101 86a58008 8b670040 a53d785c atikmdag+0×11482c
a53d7868 8b6cd9da 8685b0e8 00000000 00000001 atikmdag+0×11d101
a53d7888 8b59f159 88340000 00000000 00000001 atikmdag+0×17a9da
a53d78a8 8b59505c 86a58000 86a61974 00000000 atikmdag+0×4c159
a53d78dc 8b5973e3 00000000 86a611e0 00000001 atikmdag+0×4205c
a53d7904 8b5b3be0 00000001 00000001 00000001 atikmdag+0×443e3
a53d7960 8b5b80ab 86a58000 00000000 00000001 atikmdag+0×60be0
a53d7980 8b58e38d 86a58000 a53d799c a53d7ba0 atikmdag+0×650ab
a53d79b8 8b554e80 86a58000 a53d7ba0 00000030 atikmdag+0×3b38d
a53d79dc 8b55a7de a53d7ba0 00000030 a53d7bd4 atikmdag+0×1e80
a53d7a00 8b55af33 0011000e 00000030 a53d7bd4 atikmdag+0×77de
a53d7a24 8b56bdeb 00000030 a53d7ba0 00000000 atikmdag+0×7f33
a53d7a54 8b56bf8a 00000000 a53d7b1c a53d7ba0 atikmdag+0×18deb
a53d7a74 89c4a7b2 8640a648 a53d7ab4 000000b8 atikmdag+0×18f8a
a53d7a94 89c4a455 a53d7ab4 a5b4b811 0012e910 dxgkrnl!DXGADAPTER::DdiEscape+0×3b
a53d7d38 81c4607a 0012e910 0012e94c 77940f34 dxgkrnl!DxgkEscape+0×4af
a53d7d38 77940f34 0012e910 0012e94c 77940f34 nt!KiFastCallEntry+0×12a
0012e94c 00000000 00000000 00000000 00000000 0×77940f34STACK_COMMAND: .thread 0xffffffff870246b8 ; kb
FOLLOWUP_IP:
dxgkrnl!TdrTimedOperationBugcheckOnTimeout+2b
89c2a825 cc int 3SYMBOL_STACK_INDEX: 1
SYMBOL_NAME: dxgkrnl!TdrTimedOperationBugcheckOnTimeout+2b
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: dxgkrnl
IMAGE_NAME: dxgkrnl.sys
DEBUG_FLR_IMAGE_TIMESTAMP: 46899fd6
FAILURE_BUCKET_ID: 0xEA_IMAGE_dxgkrnl.sys
BUCKET_ID: 0xEA_IMAGE_dxgkrnl.sys
Followup: MachineOwner
Seems that the hardware was messed up, as I had to force the laptop to power down twice during subsequent boots, in order for Vista to make it to the logon prompt.
»
Written by «/\/\Ø|ö±ò\/»®© on December 10th, 2007 with no comments.
Read more articles on THREAD_STUCK_IN_DEVICE_DRIVER and BugCheck and debugging and otherSoftware and bsod and vista.


A couple of people, dozen at max, have expressed interest in testing out the 




























