Dell laptop causes BSOD after coming out of hibernation

This issue has been bugging me for months. Everytime I close lid of my monitor and later on open it to resume work from where I left, its a 90% chance that my laptop will be throwing BSOD and smiling at me and saying, how dare you leave device driver programming, i will remind you how much you liked blue color. A normal restore after hibernation is just a luck. If you actually get a normal store, I will say go play lottery because that will be your lucky day. Anyways, this has been an ongoing problem that laptop will throw BSOD after coming out of hibernation. I have looked around on all search engines. And it seems that a lot of dell laptops have been having this issue. This is caused by a threading issue in device driver. Finally I decided to look at the minidump generated by this BSOD to see whats going on. See what I get when I run !analyze -v command in WndBg debugging tool.


kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

THREAD_STUCK_IN_DEVICE_DRIVER_M (100000ea)
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 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: 8a3bbae0, Pointer to a stuck thread object.  Do .thread then kb on it to find
	the hung location.
Arg2: 8a63db50, Pointer to a DEFERRED_WATCHDOG object.
Arg3: f78c2cb4, Pointer to offending driver name.
Arg4: 00000001, Number of times "intercepted" bugcheck 0xEA was hit (see notes).

From this description, somethings came to my mind that could be potential reason for BSOD. I remember that my problems started when I upgraded my laptop from 1G to 2G RAM usage. Well that means that size of hiberfil.sys increased as well. That translates to another ripple effect that underlying drivers that have to process saved state have to perform more work as well. What may be happening is that the video drivers do not want to be stuck in long loops and they end up doing a BUGCHECK.

Well the obvious solution at this point seems is that you need a newer driver. Well, not it depends on your video card vendor. For lot of older systems, they don't have new driver that can deal with this issue. And they do not want to spend resources on fixing this in old drivers to release a fix. They want you to upgrade to new video cards. And for laptop vendors, it translates to that they want you to buy a new laptop from them. Hmmm.. make the consumer buy a new laptop or offer a free upgrade to new driver. Well, you know the answer.

Here are few things that I tried to see if this problem goes away.

  • Did memory diagnostics using Memtest tool from MemTest.Org. It took me about 3hrs to run diagnostics. All tests passed. So my memory is OK.
  • Somebody suggested, how about reinstall of OS. For kicks I did that as well. That did not help either.
  • Then dell support suggested, you need to install all our tools and drivers in certain order. Well i did that as well. That did not help either.
  • How about shutting down machine and not try to hibernate. Tries that as well but of no use.

After looking at dump analysis, here is what I think is worth trying.

  • Removing couple of DIMMs to see if this problem goes away. No i am not suggesting that you need to run your laptop at lower memory. I am just saying how about seeing if increased memory is the real problem that is putting video drivers in tail spin.
  • May be trying with a different brancd of memory and see if some corruption in DIMM may be causing slow processing of hibernated state.

If you do find a solution to the problem or updated drivers, please post a comment here. There are a lot of users who will benefit from it.

comments powered by Disqus