[SOLVED] INTERNAL_POWER_ERROR - Power IRP Allocation - nvhda64v

mattcargile

Member
Joined
Feb 14, 2024
Posts
5
I've been fighting this BSOD since I got this machine. The machine will go to sleep or the like and then over some arbitrary set of minutes or hours, my machine with BSOD and reboot (i.e. I get a critical message 41 in the Event Viewer ).

I've used WinDbg to gather some information and googled around with little help. I've installed WinDbg and used !analyze -v9 to look at what is happening which is how I assume it is related to nvhda64v.

I've done things like reimaging the machine and upgrading the Nvidia Drivers ( NOTE: nvhda64v is the Nvidia High Definition Audio Driver ). None seems to help. I've used the manufacturer's drivers and Nvidia's drivers. I've done a memtest successfully across 9 or so rounds.

  • System Manufacturer?
    • Dell XPS 17
  • Laptop or Desktop?
    • Laptop
  • Exact model number (if laptop, check label on bottom)
    • 9720
  • OS ? (Windows 11, 10, 8.1, 8, 7, Vista)
    • Windows 11 Version 22H1 ( OS Build 22621.3155 )
  • x86 (32bit) or x64 (64bit)?
    • x64
  • What was original installed OS on system?
    • No, it has since been reimaged with the same OS.
  • Is the OS an OEM version (came pre-installed on system) or full retail version (YOU purchased it from retailer)?
    • I pulled the OS from Microsoft and used my key that came from the OEM.
  • Age of system? (hardware)
    • Less than a year
  • Age of OS installation?
    • Months old
  • Have you re-installed the OS?
    • Yes
  • CPU
    • 12th Gen Intel Core i9-12900HK 2.50 Ghz
  • RAM (brand, EXACT model, what slots are you using?)
    • 64GB ( Two 32GB CT32G48C40S5.M16A1 )
  • Video Card
    • Intel Iris Xe Graphics and Nvidia GeForce RTX 3060 Laptop GPU
  • Is driver verifier enabled or disabled?
    • Disabled
  • What security software are you using? (Firewall, antivirus, antimalware, antispyware, and so forth)
    • None. Default Windows Defender.
  • Are you using proxy, vpn, ipfilters or similar software?
    • No
  • Are you using Disk Image tools? (like daemon tools, alcohol 52% or 120%, virtual CloneDrive, roxio software)
    • No
  • Are you currently under/overclocking? Are there overclocking software installed on your system?
    • No under or over clocking. There isn't software installed for this purpose.

Speccy

Partial WinDbg Output

Code:
INTERNAL_POWER_ERROR (a0)
The power policy manager experienced a fatal error.
Arguments:
Arg1: 0000000000000001, Error Handling power IRP.
Arg2: 0000000000000006, The system has failed to allocate a necessary power IRP.
Arg3: ffffd30c461aae00, target device object
Arg4: 0000000000000001, device power IRP

STACK_TEXT: 
ffffbd83`7e616ae8 fffff805`278be5a1     : 00000000`000000a0 00000000`00000001 00000000`00000006 ffffd30c`461aae00 : nt!KeBugCheckEx
ffffbd83`7e616af0 fffff805`2772c299     : ffffd30c`46742b70 00000000`00000000 ffffd30c`00048f02 ffffd30c`00000001 : nt!PopAllocateIrp+0x1921bd
ffffbd83`7e616bc0 fffff805`2772c1d2     : ffffd30c`460d1920 00000000`00000001 ffffd30c`46742b70 00000000`00000000 : nt!PopRequestPowerIrp+0xb9
ffffbd83`7e616c50 fffff805`912a83e7     : ffffd30c`3693c010 fffff805`27857c9d ffffd30c`00000000 00000000`00001001 : nt!PoRequestPowerIrp+0x22
ffffbd83`7e616ca0 ffffd30c`3693c010     : fffff805`27857c9d ffffd30c`00000000 00000000`00001001 00000000`00000000 : nvhda64v+0x83e7
ffffbd83`7e616ca8 fffff805`27857c9d     : ffffd30c`00000000 00000000`00001001 00000000`00000000 00000000`00000000 : 0xffffd30c`3693c010
ffffbd83`7e616cb0 ffffd30c`460d1f40     : 00000000`00000f00 ffffe500`a5600000 00000000`00000000 fffff805`912b0151 : nt!IopPerfCallDriver+0xb3
ffffbd83`7e616ce0 00000000`00000f00     : ffffe500`a5600000 00000000`00000000 fffff805`912b0151 fffff805`27400000 : 0xffffd30c`460d1f40
ffffbd83`7e616ce8 ffffe500`a5600000     : 00000000`00000000 fffff805`912b0151 fffff805`27400000 ffffd30c`4a074550 : 0xf00
ffffbd83`7e616cf0 00000000`00000000     : fffff805`912b0151 fffff805`27400000 ffffd30c`4a074550 ffffd30c`17010140 : 0xffffe500`a5600000
 

Attachments

Last edited:
ADDENDUM: I'm looking at the blogs on bsodtutorials.wordpress.com for A0 now to see if I can learn something.

I assume I can fix it by turning off Sleep altogether. I would like to understand the issue more or ideally fix it. It really bothers me that I can't use the device like it was setup.

I did run !devpowerstate where I received the below error.

Code:
Error reading value of IopRootDeviceNode (0xfffff8052805c800)
 
I did find this article about my exact issue. It was found to update the drivers which I have done a few times already. I just disabled the Nvidia Audio driver in Device Manager. I'll see how that goes. :-/
 
I've seen problems with the Nvidia audio driver before (the nvhda64v.sys driver). On some systems it seems to interfere with other audio drivers, though I've not seen it cause a 0xA0 bugcheck before.

You only need the Nvidia audio driver if you are using audio over HDMI, to a TV for example. If you're not sending audio over HDMI it's best not to install this driver at all. Similarly, you only need the Nvidia USB-C driver if you have a monitor connected to a USB-C port, and you only need the PhysX driver if you have a game that requires it. On my system I uncheck all of those and just install the graphics driver.

Since this is a 0xA0 bugcheck it might be worth removing and reseating the graphics card, just in case
 
I would like to understand the issue more or ideally fix it.
The only proper solution is to fix the bug with that driver otherwise you're going to have to remove it.

Rich (BB code):
4: kd> !stack -p
Call Stack : 10 frames
## Stack-Pointer    Return-Address   Call-Site       
00 ffffbd837e616ae8 fffff805278be5a1 nt!KeBugCheckEx+0 
    Parameter[0] = 00000000000000a0
    Parameter[1] = 0000000000000001
    Parameter[2] = 0000000000000006
    Parameter[3] = ffffd30c461aae00
01 ffffbd837e616af0 fffff8052772c299 nt!PopAllocateIrp+1921bd (perf)
    Parameter[0] = ffffd30c46742b70 // Pointer to _DEVICE_OBJECT
    Parameter[1] = (unknown)       
    Parameter[2] = ffffd30c3693c202 // I should image this is a pointer to the _IRP if it were to be allocated
    Parameter[3] = (unknown)       
02 ffffbd837e616bc0 fffff8052772c1d2 nt!PopRequestPowerIrp+b9 
    Parameter[0] = ffffd30c46742b70
    Parameter[1] = ffffd30c3693c202
    Parameter[2] = 0000000000000001 // _DEVICE_POWER_STATE?
    Parameter[3] = (unknown)       
03 ffffbd837e616c50 fffff805912a83e7 nt!PoRequestPowerIrp+22 
    Parameter[0] = (unknown)       
    Parameter[1] = (unknown)       
    Parameter[2] = (unknown)       
    Parameter[3] = (unknown)       
04 ffffbd837e616ca0 ffffd30c3693c010 nvhda64v+83e7 (leaf)
    Parameter[0] = (unknown)       
    Parameter[1] = (unknown)       
    Parameter[2] = (unknown)       
    Parameter[3] = (unknown)

So, the driver calls PoRequestPowerIrp which in turn internally calls PopRequestPowerIrp, really all this function does is create the requested power IRP and then push it to the top of the device stack associated to that device object, which you can see below, which is why that particular device object is given in the second parameter rather than the device object we were actually allocating the power IRP for.

Rich (BB code):
4: kd> !devstack ffffd30c461aae00
  !DevObj           !DrvObj            !DevExt           ObjectName
> ffffd30c461aae00  \Driver\ksthunk    ffffd30c461aaf50  Cannot read info offset from nt!ObpInfoMaskToOffset

  ffffd30c46742b70  \Driver\NVHDA      ffffd30c46742cc0  InfoMask field not found for _OBJECT_HEADER at ffffd30c46742b40

  ffffd30c4660cb70  \Driver\HDAudBus   ffffd30c4660de20  Cannot read info offset from nt!ObpInfoMaskToOffset

This was my immediate thought and it seems to be correct, we haven't allocated enough pool to be able to create the IRP object which is why the allocation fails.

Rich (BB code):
4: kd> !error c000009a
Error code: (NTSTATUS) 0xc000009a (3221225626) - Insufficient system resources exist to complete the API.

From looking at the ReactOS source code which is a pretty accurate port of most of the Windows APIs, it would seem that it returns this status code if IoAllocateIrp fails to return an IRP object.

Rich (BB code):
4: kd> dt _DEVICE_OBJECT -y StackSize ffffd30c`461aae00
nt!_DEVICE_OBJECT
   +0x04c StackSize : 7 ''

The documentation for IoAllocateIrp does state that the stack size must be at least equal to the stack size of the next lower device object, however, it can be one greater than it, but it would seem that the stack size is 5 greater?

Rich (BB code):
4: kd> dt _DEVICE_OBJECT -y StackSize ffffd30c46742b70
nt!_DEVICE_OBJECT
   +0x04c StackSize : 2 ''

It looks like the pool allocation would have been between 712 and 856 bytes. If you were more interested in why this pool allocation is failing, then you could enable Driver Verifier on that particular driver using Pool Tracking and Special Pool?
 
I've seen problems with the Nvidia audio driver before (the nvhda64v.sys driver). On some systems it seems to interfere with other audio drivers, though I've not seen it cause a 0xA0 bugcheck before.

You only need the Nvidia audio driver if you are using audio over HDMI, to a TV for example. If you're not sending audio over HDMI it's best not to install this driver at all. Similarly, you only need the Nvidia USB-C driver if you have a monitor connected to a USB-C port, and you only need the PhysX driver if you have a game that requires it. On my system I uncheck all of those and just install the graphics driver.

Since this is a 0xA0 bugcheck it might be worth removing and reseating the graphics card, just in case
Thanks, @ubuysa! It is a pleasure to read through your posts on this forum. I hit my machine with _DDU_ and then re-installed without the HD audio. I had disabled the Audio Driver and didn't get a BSOD last night which is nice. I don't use HDMI audio anyway. I'm mostly solved at this point, I believe.

The only proper solution is to fix the bug with that driver otherwise you're going to have to remove it.

Rich (BB code):
4: kd> !stack -p
Call Stack : 10 frames

@x BlueRobot How are you running this !stack command? I get a No export stack found error.


@x BlueRobot , this is fascinating stuff. I've had an enjoyable time reading your posts. Thanks so much for taking the time to analyze it.

All - I'm going to wait a week or so and see if I get any more BugChecks. I'll report back.

EDIT 1: Sorry if I @-ed you in poor taste! Oops.
 
Last edited:
How are you running this !stack command? I get a No export stack found error.
No problem and that command is part of a third-party debugger library called CMKD: CodeMachine - Tools - CMKD

You'll want to save the appropriate version to: C:\Program Files (x86)\Windows Kits\10\Debuggers\x64 and then load it explicitly in WinDbg using !load cmkd.
 
Marking solved. Removing the Nvidia HD Audio Driver resolved the issue. I haven't received another BugCheck since 2/14/2024. uptime is 13 days at this point. :-)
 
Back
Top