0x19C.50 Lid
- Nick Kuo
- BSOD Analysis
- 25 Dec, 2024
2: kd> .bugcheck
Bugcheck code 0000019C
Arguments 00000000`00000050 ffffbf87`de64a3c0 00000000`00000000 00000000`00000000
2: kd> !thread ffffbf87`de64a3c0
THREAD ffffbf87de64a3c0 Cid 05b8.0768 Teb: 0000004ed26ae000 Win32Thread: ffffbf87ec7e9680 WAIT: (Executive) KernelMode Non-Alertable
fffff8052f119678 NotificationEvent
IRP List:
ffffbf87d25fcea0: (0006,0118) Flags: 00060000 Mdl: 00000000
Not impersonating
DeviceMap ffff9585e1c49a50
Owning Process ffffbf87debe7180 Image: csrss.exe
Attached Process N/A Image: N/A
Wait Start TickCount 1681451 Ticks: 640 (0:00:00:10.000)
Context Switch Count 304 IdealProcessor: 5
UserTime 00:00:00.000
KernelTime 00:00:00.062
Win32 Start Address winsrvext!PowerNotificationThread (0x00007ffbd6263950)
Stack Init ffffa784a007f5f0 Current ffffa784a007e520
Base ffffa784a0080000 Limit ffffa784a0079000 Call 0000000000000000
Priority 14 BasePriority 13 IoPriority 2 PagePriority 5
Child-SP RetAddr : Args to Child : Call Site
ffffa784`a007e560 fffff805`2b86c9d5 : 00000000`00000020 00000000`00000000 ffffac01`0e897180 ffffa784`a007e7d0 : nt!KiSwapContext+0x76 [minkernel\ntos\ke\amd64\ctxswap.asm @ 134]
ffffa784`a007e6a0 fffff805`2b86ebb7 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiSwapThread+0xab5 [minkernel\ntos\ke\thredsup.c @ 14700]
ffffa784`a007e7f0 fffff805`2b870ad6 : 00000000`00000000 00000000`00000001 00000000`00000000 00000000`00000000 : nt!KiCommitThreadWait+0x137 [minkernel\ntos\ke\waitsup.c @ 795]
ffffa784`a007e8a0 fffff805`2f270804 : 00000000`00000000 ffffbf87`cc50c180 00000000`00000000 00000000`00000000 : nt!KeWaitForSingleObject+0x256 [minkernel\ntos\ke\wait.c @ 867]
ffffa784`a007ec40 fffff805`2f1883b8 : ffff5b27`867bc44f ffff9585`00000000 ffffa784`a007efd0 00000000`00015228 : dxgkrnl!DxgkPowerOnOffMonitor+0xa68f8 [onecoreuap\windows\core\dxkernel\dxgkrnl\port\dpfdo.cxx @ 10607]
ffffa784`a007ed70 fffff805`2f1b7d0f : ffffbf87`ffffffff ffffbf87`d25fcea0 ffffbf87`eba1de70 fffff805`2b8deab1 : dxgkrnl!DpiGdoDispatchInternalIoctl+0x578 [onecoreuap\windows\core\dxkernel\dxgkrnl\port\dpgdo.cxx @ 1297]
ffffa784`a007ee20 fffff805`2b8ec0a5 : 00000000`c0000002 00000000`00000010 00000000`c0000002 00000000`00000010 : dxgkrnl!DpiDispatchInternalIoctl+0xff [onecoreuap\windows\core\dxkernel\dxgkrnl\port\dpport.cxx @ 2789]
(Inline Function) --------`-------- : --------`-------- --------`-------- --------`-------- --------`-------- : nt!IopfCallDriver+0x40 (Inline Function @ fffff805`2b8ec0a5) [minkernel\ntos\io\iomgr\mp\objfre\amd64\iomgr.h @ 3709]
ffffa784`a007ef50 ffffd6a2`10f973e0 : 00000000`00000002 ffff9bfd`0fa00000 ffff9585`f6618740 ffffd6a2`10f8e60a : nt!IofCallDriver+0x55 [minkernel\ntos\io\iomgr\iosubs.c @ 3384]
ffffa784`a007ef90 ffffd6a2`1103ee43 : ffff9585`f6618740 ffffa784`a007f130 00000000`00000002 ffffbf87`c72fe670 : win32kbase!GreDeviceIoControlImpl+0x100
ffffa784`a007f030 ffffd6a2`1103ebcf : ffffa784`a007f2b0 00000000`706d7447 00000000`00000001 00000000`00000000 : win32kbase!DrvSetWddmDeviceMonitorPowerState+0x253
ffffa784`a007f180 ffffd6a2`10f8c93b : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : win32kbase!DrvSetMonitorPowerState+0x2f
ffffa784`a007f1b0 ffffd6a2`10f8ba76 : 00000000`00000000 ffffa784`a007f2c9 00000000`0000000c 00000000`00000001 : win32kbase!PowerOnMonitor+0x21b
ffffa784`a007f220 ffffd6a2`10f8b634 : ffffbf87`f0150da0 ffffbf87`f0150da0 00000000`00000001 00000000`00000001 : win32kbase!xxxUserPowerEventCalloutWorker+0x33e
ffffa784`a007f330 ffffd6a2`10ae5302 : ffffbf87`de64a3c0 00000000`00000000 00000000`00000020 fffff805`2bd3f5de : win32kbase!xxxUserPowerCalloutWorker+0x264
ffffa784`a007f400 ffffd6a2`10796ed5 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`000000f4 : win32kfull!NtUserUserPowerCalloutWorker+0x22
ffffa784`a007f430 fffff805`2ba2bce8 : ffffbf87`000005a2 76e75c5b`7c220000 00000000`00000000 00000000`00000000 : win32k!NtUserUserPowerCalloutWorker+0x15
ffffa784`a007f460 00007ffb`d655c8f4 : 00007ffb`d62639b6 00000050`000000fe 00000000`00000000 00000000`00000000 : nt!KiSystemServiceCopyEnd+0x28 (TrapFrame @ ffffa784`a007f460) [minkernel\ntos\ke\amd64\trap.asm @ 3605]
0000004e`d2b7f988 00007ffb`d62639b6 : 00000050`000000fe 00000000`00000000 00000000`00000000 00000000`00000000 : win32u!NtUserUserPowerCalloutWorker+0x14
0000004e`d2b7f990 00007ffb`d900aa65 : 00000000`00000800 80000000`0000000f 00000000`00000000 00000000`00000000 : winsrvext!PowerNotificationThread+0x66
0000004e`d2b7f9c0 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x35 [minkernel\ntdll\rtlstrt.c @ 1162]
Power worker thread is waiting on something, let’s find what it is.

It came from dxgkrnl!DpGlobals+0x1f8
2: kd> dt dxgkrnl!DpGlobals
...
+0x1f0 NumPendingLidSwitchEvents : 1
+0x1f8 NoPendingLidSwitchEvent : _KEVENT
This is a KEVENT, judging by its name, NumPendingLidSwitchEvents probably indicates how many outstanding there is, and when all lid switch events are done, the NoPendingLidSwitchEvent is signaled.
No other suspected threads found in dump, I used a live system to find where this event is created.
0: kd> ba w 8 dxgkrnl!DpGlobals+0x1f0
0: kd> g
>>> I close the lid here <<<
Breakpoint 0 hit
dxgkrnl!DpiAcpiCallAcpiEventHandler+0x137:
fffff801`beeca26b 488d0d06f40c00 lea rcx,[dxgkrnl!DpGlobals+0x1f8 (fffff801`bef99678)]
10: kd> k
# Child-SP RetAddr Call Site
00 ffffaf8f`9a01f050 fffff801`bee9ecc8 dxgkrnl!DpiAcpiCallAcpiEventHandler+0x137 [onecoreuap\windows\core\dxkernel\dxgkrnl\port\dpacpi.cxx @ 94]
01 ffffaf8f`9a01f100 fffff801`81b3e0a9 dxgkrnl!DpiAcpiPowerStateCallback+0x1c9a8 [onecoreuap\windows\core\dxkernel\dxgkrnl\port\dpacpi.cxx @ 1527]
02 ffffaf8f`9a01f130 fffff801`81b3dfcc nt!ExNotifyWithProcessing+0xc9 [minkernel\ntos\ex\callback.c @ 1093]
03 ffffaf8f`9a01f190 fffff801`82188a92 nt!ExNotifyCallback+0xc [minkernel\ntos\ex\callback.c @ 929]
04 ffffaf8f`9a01f1c0 fffff801`81ecae38 nt!PopBroadcastLegacyLidSwitchChangeCallback+0x42 [minkernel\ntos\po\switch.c @ 662]
05 ffffaf8f`9a01f1f0 fffff801`81ecad0d nt!PopCallPowerSettingCallback+0xc4 [minkernel\ntos\po\posetting.c @ 905]
06 ffffaf8f`9a01f2d0 fffff801`81ec995c nt!PopDispatchPowerSettingCallbacks+0xbd [minkernel\ntos\po\posetting.c @ 1933]
07 ffffaf8f`9a01f310 fffff801`81b60a98 nt!PopPolicyWorkerNotify+0x3c [minkernel\ntos\po\pwork.c @ 472]
08 ffffaf8f`9a01f340 fffff801`81a34f85 nt!PopPolicyWorkerThread+0xa8 [minkernel\ntos\po\pwork.c @ 271]
09 ffffaf8f`9a01f380 fffff801`81b07317 nt!ExpWorkerThread+0x155 [minkernel\ntos\ex\worker.c @ 4308]
0a ffffaf8f`9a01f570 fffff801`81c1bcc4 nt!PspSystemThreadStartup+0x57 [minkernel\ntos\ps\psexec.c @ 10885]
0b ffffaf8f`9a01f5c0 00000000`00000000 nt!KiStartSystemThread+0x34 [minkernel\ntos\ke\amd64\threadbg.asm @ 83]
Something something ACPI, which makes sense, lid event came from ACPI stuff.
Search for ACPI in dump.
2: kd> !stacks 2 Acpi
Proc.Thread .Thread Ticks ThreadState Blocker
[fffff8052c348f40 Idle]
[ffffbf87b95c8040 System]
4.0001ac ffffbf87c3ee2080 000003f Blocked nt!KiSwapContext+0x76
nt!KiSwapThread+0xab5
nt!KiCommitThreadWait+0x137
nt!KeWaitForMultipleObjects+0x306
ACPI!ACPIWorkerThread+0x9a
nt!PspSystemThreadStartup+0x57
nt!KiStartSystemThread+0x34
4.0001dc ffffbf87c5be7100 019a9d8 Blocked nt!KiSwapContext+0x76
nt!KiSwapThread+0xab5
nt!KiCommitThreadWait+0x137
nt!KeWaitForMultipleObjects+0x306
ACPI!PciRootBusBiosMethodDispatcherOnResume+0x57
nt!PspSystemThreadStartup+0x57
nt!KiStartSystemThread+0x34
4.003704 ffffbf87d9779080 00000a7 Blocked nt!KiSwapContext+0x76
nt!KiSwapThread+0xab5
nt!KiCommitThreadWait+0x137
nt!KeWaitForSingleObject+0x256
nt!ExpWaitForResource+0x6b
nt!ExpAcquireResourceExclusiveLite+0x317
nt!ExpAcquireResourceExclusiveLite+0x317
nt!ExAcquireResourceExclusiveLite+0x13c
dxgkrnl!DXGADAPTER::AcquireCoreResourceExclusiveWithTracking+0x7f
dxgkrnl!DXGADAPTER::AcquireCoreResourceExclusive+0xcb
dxgkrnl!DXGADAPTER::AcquireCoreSync+0x86
dxgkrnl!DxgkAcquireAdapterCoreSync+0x62
dxgkrnl!DpiAcpiHandleAcpiEvent+0x1cf
dxgkrnl!DpiAcpiHandleAcpiEventWork+0xf4
nt!IopProcessWorkItem+0x8e
nt!ExpWorkerThread+0x155
nt!PspSystemThreadStartup+0x57
nt!KiStartSystemThread+0x34
Waiting on EResource, identify it.
EResource = 0xffffbf87`cc2d2290
Try to find how long have you been waiting, EResource needs a special way to identify wait time.
2: kd> .frame 0n4;dv /t /v
04 ffffa784`a2d66d80 fffff805`2b868317 nt!ExpWaitForResource+0x6b [minkernel\ntos\ex\resource_common.c @ 968]
@rbx struct _ERESOURCE_COMMON * Resource = 0xffffbf87`cc2d2290
@r13 struct _KWAIT_CHAIN_ENTRY * WaitChainEntry = 0xffffa784`a2d66e48
@r12d unsigned long WaitType = 0x10224
@r14 <function> * RewaitCallback = 0xfffff805`2b969cc0
@esi unsigned long WaitCount = 2
ffffa784`a2d66db8 union _LARGE_INTEGER Timeout = {-40000000}
<unavailable> struct _ERESOURCE_TIMEOUT_WORK_ITEM_CONTEXT * ResourceTimeoutWorkItemContext = <value unavailable>
@edi unsigned long PerfLogTracingLimit = 2
@eax long Status = 0n0
0.5s + (2 - 1) * 4s + 2.609s = 7.109s. Seems good ;)
2: kd> !locks 0xffffbf87`cc2d2290
KD: Scanning for held locks.................................................
Resource @ 0xffffbf87cc2d2290 Shared 1 owning threads
Contention Count = 133
NumberOfSharedWaiters = 1
NumberOfExclusiveWaiters = 1
Threads: ffffbf87e87280c0-01<*> **ffffbf87dd4570c0-01 < Someone else is waiting share**
Threads Waiting On Exclusive Access:
**ffffbf87d9779080 < We're waiting for exclusive access**
1 total locks
2: kd> !thread ffffbf87e87280c0
THREAD ffffbf87e87280c0 Cid 10cc.28ac Teb: 000000f878e68000 Win32Thread: ffffa784a33bef90 WAIT: (Executive) KernelMode Non-Alertable
ffffbf87f409a658 NotificationEvent
Not impersonating
DeviceMap ffff9585ee0295e0
Owning Process ffffbf87e89090c0 Image: HPSystemEventUtilityHost.exe
Attached Process N/A Image: N/A
Wait Start TickCount 1681624 Ticks: 467 (0:00:00:07.296)
Context Switch Count 144 IdealProcessor: 1
UserTime 00:00:00.000
KernelTime 00:00:00.000
Win32 Start Address 0x00007ffb95ebdbc0
Stack Init ffffa784a33bf5f0 Current ffffa784a33bdc60
Base ffffa784a33c0000 Limit ffffa784a33b9000 Call 0000000000000000
Priority 15 BasePriority 4 Unusual Boost 11 IoPriority 2 PagePriority 5
Child-SP RetAddr : Args to Child : Call Site
ffffa784`a33bdca0 fffff805`2b86c9d5 : 00000000`00000020 00000000`00000000 ffffbf87`e8728880 ffffac01`0e563180 : nt!KiSwapContext+0x76 [minkernel\ntos\ke\amd64\ctxswap.asm @ 134]
ffffa784`a33bdde0 fffff805`2b86ebb7 : ffffac01`0e563180 fffff805`2ba20527 ffffbf87`e89090c0 00000000`00000000 : nt!KiSwapThread+0xab5 [minkernel\ntos\ke\thredsup.c @ 14700]
ffffa784`a33bdf30 fffff805`2b870ad6 : ffff9585`00000000 ffff9585`00000001 00000000`00000000 00000000`00000000 : nt!KiCommitThreadWait+0x137 [minkernel\ntos\ke\waitsup.c @ 795]
ffffa784`a33bdfe0 fffff805`285dbdc8 : ffffbf87`f409a610 ffffbf87`f409a610 ffffbf87`c64fe1e8 ffffbf87`c64fe1f0 : nt!KeWaitForSingleObject+0x256 [minkernel\ntos\ke\wait.c @ 867]
ffffa784`a33be380 fffff805`285d05f7 : ffffa784`a33be600 00000000`00000000 00000000`40000c80 ffff9585`f6d8bd70 : dxgmms2!VIDMM_GLOBAL::CloseOneAllocation+0xf8 [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmglobal.cxx @ 5302]
ffffa784`a33be4d0 fffff805`2854268a : 00000000`00000000 ffff9585`f6d8bd70 ffffa784`a33be6e0 00000000`00000000 : dxgmms2!VIDMM_GLOBAL::CloseAllocation+0xc3 [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmglobal.cxx @ 5111]
ffffa784`a33be520 fffff805`2f18eed3 : 00000000`00000000 ffff9585`f581da40 00000000`0000000b 00000000`00000000 : dxgmms2!VidMmCloseAllocation+0x1a [onecoreuap\windows\core\dxkernel\dxgkrnl\inc\dxgmms.hxx @ 1178]
(Inline Function) --------`-------- : --------`-------- --------`-------- --------`-------- --------`-------- : dxgkrnl!VIDMM_EXPORT::VidMmCloseAllocation+0x28 (Inline Function @ fffff805`2f18eed3) [onecoreuap\windows\core\dxkernel\dxgkrnl\inc\mmsthunk.hxx @ 1776]
ffffa784`a33be560 fffff805`2f18eb8e : ffff9585`f427b010 fffff805`2f16024e ffff9585`f427b010 ffff9585`f427b100 : dxgkrnl!DXGDEVICE::DestroyAllocations+0x323 [onecoreuap\windows\core\dxkernel\dxgkrnl\core\alloc.cxx @ 1552]
ffffa784`a33be830 fffff805`2f16044e : ffff9585`f427b010 00000000`00000000 ffff9585`f427b200 00000000`00000000 : dxgkrnl!DXGDEVICE::DrainAllocations+0x5e [onecoreuap\windows\core\dxkernel\dxgkrnl\core\device.cxx @ 8468]
ffffa784`a33be890 fffff805`2f160f8f : ffff9585`f427b010 ffff9585`f5bb9c00 ffffbf87`eea6dc80 ffffa784`a33bea38 : dxgkrnl!DXGDEVICE::DestroyAllDeviceState+0x1c6 [onecoreuap\windows\core\dxkernel\dxgkrnl\core\device.cxx @ 888]
ffffa784`a33be900 fffff805`2f1730aa : 00000000`00000000 ffffa784`a33bea80 ffff9585`f427b010 ffff9585`f6d8beb0 : dxgkrnl!ADAPTER_RENDER::DestroyDevice+0x103 [onecoreuap\windows\core\dxkernel\dxgkrnl\core\adapterrender.cxx @ 1951]
ffffa784`a33be980 fffff805`2f172a30 : ffff9585`f6d8bd70 00000000`00000000 00000000`00040002 00000000`00000000 : dxgkrnl!DXGPROCESS::Destroy+0x45a [onecoreuap\windows\core\dxkernel\dxgkrnl\core\process.cxx @ 2026]
ffffa784`a33beb20 fffff805`2f171887 : ffff9585`f6d8bd70 ffff9585`f6d8bd70 00000000`ffffffff ffffbf87`caf02170 : dxgkrnl!DXGPROCESS::DestroyDxgProcess+0x13c [onecoreuap\windows\core\dxkernel\dxgkrnl\core\process.cxx @ 116]
ffffa784`a33becb0 ffffd6a2`107917d9 : 00000000`00000000 00000000`00000000 00000000`00001000 ffffa784`a33bed48 : dxgkrnl!DxgkProcessCallout+0x237 [onecoreuap\windows\core\dxkernel\dxgkrnl\core\process.cxx @ 385]
ffffa784`a33bee50 ffffd6a2`10fb5dba : 00000000`000010cc 00000000`00000000 ffffd6a2`111bba20 00000000`00000000 : win32k!DxDdProcessCallout+0x69
ffffa784`a33bee80 ffffd6a2`10a7996d : ffff9585`f065c610 ffffbf87`e89090c0 00000000`00000000 ffffa784`a33bf1c8 : win32kbase!GdiProcessCallout+0x2ca
ffffa784`a33bef00 ffffd6a2`11050dd1 : 00000000`00000000 00000000`00000001 ffffa784`a33bf1c8 00000000`00000000 : win32kfull!W32pProcessCallout+0x8d
ffffa784`a33bef40 ffffd6a2`107910cb : 00000000`00000000 00000000`00000000 ffffbf87`d75d8890 fffff805`2bdc04b8 : win32kbase!W32CalloutDispatch+0x3a1
ffffa784`a33bf090 fffff805`2bd24881 : ffffa784`a33bf1c8 00000000`00000000 fffff805`2c237c60 ffff9585`f1715b60 : win32k!W32CalloutDispatchThunk+0x2b
ffffa784`a33bf0c0 fffff805`2bd247e3 : 00000000`00000000 ffffa784`a33bf2b9 00000000`00000000 00000000`00000000 : nt!ExCallCallBack+0x3d [minkernel\ntos\ex\callback.c @ 1654]
ffffa784`a33bf0f0 fffff805`2bcdc5b9 : ffffbf87`d75d8890 00000000`00000000 ffffa784`00000000 00000000`00000000 : nt!PsInvokeWin32Callout+0x33 [minkernel\ntos\ps\callback.c @ 1754]
ffffa784`a33bf120 fffff805`2bdcde78 : 00000000`ffffffff ffffa784`a33bf301 ffffbf87`00000100 ffffbf87`ddebf3c0 : nt!PspExitThread+0x5e5 [minkernel\ntos\ps\psdelete.c @ 2466]
(Inline Function) --------`-------- : --------`-------- --------`-------- --------`-------- --------`-------- : nt!PsExitCurrentUserThread+0x14 (Inline Function @ fffff805`2bdcde78) [minkernel\ntos\ps\psdelete.c @ 1956]
ffffa784`a33bf220 fffff805`2b90ba3d : 000002c2`427f86e0 00000000`00000004 ffffa784`a33bf460 ffffa881`61213fc0 : nt!KiSchedulerApcTerminate+0x38 [minkernel\ntos\ke\thredsup.c @ 11838]
ffffa784`a33bf260 fffff805`2ba1cf20 : 00000000`00000001 ffffa784`a33bf320 00000000`00000000 00000000`00000000 : nt!KiDeliverApc+0x47d [minkernel\ntos\ke\apcsup.c @ 514]
ffffa784`a33bf320 fffff805`2ba2bd8f : ffffbf87`e87280c0 ffffbf87`ce3dd060 00000000`00000000 00000000`00000000 : nt!KiInitiateUserApc+0x70 [minkernel\ntos\ke\amd64\apcint.asm @ 165]
ffffa784`a33bf460 00007ffb`d904f3f4 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiSystemServiceExit+0x9f (TrapFrame @ ffffa784`a33bf460) [minkernel\ntos\ke\amd64\trap.asm @ 3639]
000000f8`7abff9b8 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!ZwWaitForSingleObject+0x14 [minkernel\ntdll\daytona\objfre\amd64\usrstubs.asm @ 251]

2: kd> .frame 0n4;dv /t /v
04 ffffa784`a33be380 fffff805`285d05f7 dxgmms2!VIDMM_GLOBAL::CloseOneAllocation+0xf8 [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmglobal.cxx @ 5302]
@r14 class VIDMM_GLOBAL * this = 0xffffbf87`ebcca000
@rbx struct VIDMM_ALLOC * pAlloc = 0xffffbf87`f409a610
@r15 struct _VIDMM_LOCAL_ALLOC ** DeferredFreeHandle = 0x00000000`00000000
@edi unsigned char bFailIfBusy = 0x00 ''
ffffa784`a33be4f0 struct _D3DDDICB_DESTROYALLOCATION2FLAGS DestroyFlags = struct _D3DDDICB_DESTROYALLOCATION2FLAGS
ffffa784`a33be4f8 struct _KEVENT ** TerminationEvent = 0x00000000`00000000
ffffa784`a33be4e0 unsigned int AllocationHandle = 0x40000c80
ffffa784`a33be4d8 unsigned int ResourceHandle = 0
ffffa784`a33be400 class VIDMM_DEVICE * pVidMmDevice = 0xffffbf87`ef1561b0
@rsi struct _VIDMM_GLOBAL_ALLOC * GlobalAlloc = 0xffff9585`f6986720
<unavailable> void * hProcessAllocDetails = <value unavailable>
ffffa784`a33be410 void * PrivateRuntimeResourceHandle = 0x00000000`00000000
ffffa784`a33be408 void * pVirtualAddress = 0x000002c2`36580000
<unavailable> struct _WD_LOGENTRY * pEntry = <value unavailable>
<unavailable> struct _WD_LOGENTRY * pEntry = <value unavailable>
ffffa784`a33be430 struct _VIDMM_SYSTEM_COMMAND SystemCommand = struct _VIDMM_SYSTEM_COMMAND
<unavailable> class CVirtualAddressAllocator * pVaAllocator = <value unavailable>
2: kd> dx -id 0,0,ffffbf87debe7180 -r1 ((dxgmms2!VIDMM_ALLOC *)0xffffbf87f409a610)
((dxgmms2!VIDMM_ALLOC *)0xffffbf87f409a610) : 0xffffbf87f409a610 [Type: VIDMM_ALLOC *]
[+0x000] LocalAlloc : 0xffff9585f6d59490 [Type: _VIDMM_LOCAL_ALLOC *]
[+0x008] VidMmDevice : 0xffffbf87ef1561b0 [Type: VIDMM_DEVICE *]
[+0x010] DxgAllocation : 0xffff9585f581da40 [Type: DXGALLOCATION *]
[+0x018] ReadOnly : 0x0 [Type: unsigned char]
[+0x019 ( 0: 0)] Pinned : 0x0 [Type: unsigned char]
[+0x019 ( 1: 1)] AsyncUnpinScheduled : 0x0 [Type: unsigned char]
[+0x019 ( 2: 2)] AsyncUnpinCancelled : 0x0 [Type: unsigned char]
[+0x01a] VirtualAddressRangeCommitted : 0x0 [Type: unsigned char]
[+0x01b] MakeResidentCountedCharge : 0x0 [Type: unsigned char]
[+0x01c ( 1: 0)] State : VidMmAllocFaulted (0x1) [Type: _VIDMM_ALLOC_STATE]
[+0x01c ( 2: 2)] Terminated : 0x0 [Type: unsigned long]
[+0x01c ( 3: 3)] Shareable : 0x0 [Type: unsigned long]
[+0x01c ( 4: 4)] HasCommitmentReference : 0x0 [Type: unsigned long]
[+0x01c ( 5: 5)] VidMmAllocDebug : 0x0 [Type: unsigned long]
[+0x01c ( 6: 6)] AllocInitialized : 0x1 [Type: unsigned long]
[+0x020 ( 0: 0)] Terminating : 0x1 [Type: unsigned long]
[+0x020 ( 1: 1)] TerminatingOnSyncPoint : 0x0 [Type: unsigned long]
[+0x020 ( 7: 2)] PhysicalAdapterIndex : 0x0 [Type: unsigned long]
[+0x024 ( 0: 0)] CountsAgainstPreferredBudget : false [Type: bool]
[+0x028] AllocListEntry [Type: _LIST_ENTRY]
[+0x038] CommittedListEntry [Type: _LIST_ENTRY]
[+0x038] FaultedListEntry [Type: _LIST_ENTRY]
[+0x038] TrimmedListEntry [Type: _LIST_ENTRY]
[+0x048] TerminationEvent [Type: _KEVENT]
[+0x060] pGlobalData : 0xffffbf87cefd1b10 [Type: _VIDMM_GLOBAL_ALLOC_NONPAGED *]
[+0x068] PresentQueueReferences [Type: InterlockedCounterWithHistory]
[+0x070] ResidencyListEntry [Type: _LIST_ENTRY]
[+0x080] AllocMappedVaRangeListHead [Type: _LIST_ENTRY]
[+0x090] IoMmuVirtualAddress : 0x0 [Type: void *]
[+0x098] ResidencyReferenceCount : 1 [Type: long]
[+0x09c] DMAReferences : 0 [Type: long]
[+0x0a0] PagingPacketReferenceCount : 0 [Type: long]
[+0x0a4] PendingEvictionCount : 0 [Type: long]
[+0x0a8] PagingPacketReferenceCountEvent [Type: _KEVENT]
[+0x0c0] Tracker : 0x0 [Type: DXGTERMINATIONTRACKER *]
[+0x0c8] TerminationListEntry [Type: _LIST_ENTRY]
[+0x0d8] PendingOfferListEntry [Type: _LIST_ENTRY]
[+0x0e8] AllocRundownProtection [Type: _EX_RUNDOWN_REF]
When checked with live system, every time it calls into the routine this event has already been signaled.
Now I really don’t know where to go from here.. BUT!
dxgmms2!VIDMM_GLOBAL has a worker thread we could check out, from past experience, it is usually related to the worker thread needing to do stuff. So we could check the worker thread status first.
2: kd> .frame 0n5;dv /t /v
05 ffffa784`a33be4d0 fffff805`2854268a dxgmms2!VIDMM_GLOBAL::CloseAllocation+0xc3 [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmglobal.cxx @ 5111]
@r14 class VIDMM_GLOBAL * this = 0xffffbf87`ebcca000
@rsi struct _VIDMM_MULTI_ALLOC * MultiAlloc = 0xffffbf87`f409a610
@bpl unsigned char bFailIfBusy = 0x00 ''
@rdi struct _VIDMM_LOCAL_ALLOC ** DeferredFreeHandle = 0x00000000`00000000
ffffa784`a33be540 struct _D3DDDICB_DESTROYALLOCATION2FLAGS DestroyFlags = struct _D3DDDICB_DESTROYALLOCATION2FLAGS
ffffa784`a33be548 struct _KEVENT ** TerminationEvent = 0x00000000`00000000
ffffa784`a33be528 class DXGPROCESSVIDMMLOCK VidMmLock = class DXGPROCESSVIDMMLOCK
@eax long ntStatus = 0n0
2: kd> dx -id 0,0,ffffbf87debe7180 -r1 ((dxgmms2!VIDMM_GLOBAL *)0xffffbf87ebcca000)
((dxgmms2!VIDMM_GLOBAL *)0xffffbf87ebcca000) : 0xffffbf87ebcca000 [Type: VIDMM_GLOBAL *]
[+0x000] _WorkerThread : 0xffff9585e94c5050 [Type: VIDMM_WORKER_THREAD *]
[+0x008] _CurrentOperation : VidMmOpPageInDevice (116) [Type: _VIDMM_OPERATION]
[+0x010] _pRenderCore : 0xffffbf87d5de7810 [Type: ADAPTER_RENDER *]
[+0x018] _pDxgAdapter : 0xffffbf87ebacd000 [Type: DXGADAPTER *]
[+0x020] _DriverVersion : 0x11005 [Type: unsigned long
2: kd> dx -id 0,0,ffffbf87debe7180 -r1 ((dxgmms2!VIDMM_WORKER_THREAD *)0xffff9585e94c5050)
((dxgmms2!VIDMM_WORKER_THREAD *)0xffff9585e94c5050) : 0xffff9585e94c5050 [Type: VIDMM_WORKER_THREAD *]
[+0x000] _VidMmGlobal : 0xffffbf87ebcca000 [Type: VIDMM_GLOBAL *]
[+0x008] _KernelThread : 0xffffbf87de47b3c0 [Type: _KTHREAD *]
[+0x010] _SelectedDevice : 0xffffbf87e58fe3d0 [Type: VIDMM_DEVICE *]
2: kd> !thread 0xffffbf87de47b3c0
THREAD ffffbf87de47b3c0 Cid 0004.055c Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT: (Executive) KernelMode Non-Alertable
ffffbf87ce8d0ee0 SynchronizationEvent
Not impersonating
DeviceMap ffff9585ebf8b8b0
Owning Process ffffbf87b95c8040 Image: System
Attached Process ffffbf87ec352180 Image: dwm.exe
Wait Start TickCount 1681625 Ticks: 466 (0:00:00:07.281)
Context Switch Count 6143 IdealProcessor: 7
UserTime 00:00:00.000
KernelTime 00:00:00.343
Win32 Start Address dxgmms2!VidMmWorkerThreadProc (0xfffff805285f6620)
Stack Init ffffa7849fd6f5f0 Current ffffa7849fd6e180
Base ffffa7849fd70000 Limit ffffa7849fd69000 Call 0000000000000000
Priority 15 BasePriority 15 IoPriority 2 PagePriority 5
Child-SP RetAddr : Args to Child : Call Site
ffffa784`9fd6e1c0 fffff805`2b86c9d5 : ffffac01`0eb98180 00000000`00000000 ffffbf87`b9610040 00000000`00000000 : nt!KiSwapContext+0x76 [minkernel\ntos\ke\amd64\ctxswap.asm @ 134]
ffffa784`9fd6e300 fffff805`2b86ebb7 : 00000000`00000000 fffff805`2ba44bc9 ffffbf87`e37ea698 00000000`00000000 : nt!KiSwapThread+0xab5 [minkernel\ntos\ke\thredsup.c @ 14700]
ffffa784`9fd6e450 fffff805`2b870ad6 : 00000000`00000000 00000000`00000001 00000000`00000000 00000000`00000000 : nt!KiCommitThreadWait+0x137 [minkernel\ntos\ke\waitsup.c @ 795]
ffffa784`9fd6e500 fffff805`285daee9 : ffff9585`ecc80e00 ffff9585`ecc80e00 00000000`00000000 00000000`00000000 : nt!KeWaitForSingleObject+0x256 [minkernel\ntos\ke\wait.c @ 867]
ffffa784`9fd6e8a0 fffff805`285e908d : 00000000`0000025e ffffbf87`00000000 ffffbf87`ebcca000 00000000`00000000 : dxgmms2!VIDMM_GLOBAL::WaitForFences+0x1b9 [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmglobal.cxx @ 17187]
ffffa784`9fd6e9f0 fffff805`285f41e5 : 00000000`00020000 ffffbf87`ebcca000 ffffa784`9fd6ef18 ffffa784`9fd6ef28 : dxgmms2!VIDMM_GLOBAL::xWaitForAllPagingEngines+0x5d [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmglobal.cxx @ 17019]
ffffa784`9fd6ea40 fffff805`286391cf : 00000000`00020000 ffffa784`9fd6ef18 ffffa784`9fd6eaa0 ffffbf87`ec352180 : dxgmms2!VIDMM_GLOBAL::WaitForAllPagingEngines+0x45 [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmglobal.cxx @ 16934]
ffffa784`9fd6ea80 fffff805`2c02f63b : 00000000`00000000 ffffbf87`eca189d0 ffffbf87`ce878e20 00000000`00000000 : dxgmms2!VIDMM_MEMORY_SEGMENT::RotateFrameBufferCopyCallback+0x10f [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmlmseg.cxx @ 3265]
ffffa784`9fd6eb00 fffff805`2c02fa7b : fffff805`2c26afc0 ffffbf87`eca189d0 ffffa784`9fd6ec40 ffffbf87`ce878e20 : nt!MiRotateToFrameBuffer+0x22b [minkernel\ntos\mm\vidsup.c @ 1351]
ffffa784`9fd6ebc0 fffff805`28635fcc : 00000000`00000000 fffff805`2c26afc0 00000000`00000000 fffff805`2b880b97 : nt!MmRotatePhysicalView+0x13b [minkernel\ntos\mm\vidsup.c @ 735]
(Inline Function) --------`-------- : --------`-------- --------`-------- --------`-------- --------`-------- : dxgmms2!VidMmiDebugRotate+0x2b (Inline Function @ fffff805`28635fcc) [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmrecycleheap.cxx @ 145]
ffffa784`9fd6ec40 fffff805`28635bb2 : 00000233`6fc80000 00000000`00000003 00000000`00000000 ffffbf87`ce878e20 : dxgmms2!VIDMM_RECYCLE_MULTIRANGE::Rotate+0x3c0 [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmrecycleheap.cxx @ 3661]
ffffa784`9fd6ed10 fffff805`28626e57 : ffffbf87`d8850810 ffff9585`ecc80d60 ffffbf87`d2421d68 00000000`00000001 : dxgmms2!VIDMM_RECYCLE_HEAP_MGR::Rotate+0xb2 [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmrecycleheap.cxx @ 10336]
ffffa784`9fd6eda0 fffff805`28639aa6 : ffff9585`ecc5cb90 ffff9585`ecc80d60 ffff9585`ecc80d60 00000000`00000000 : dxgmms2!VIDMM_GLOBAL::Rotate+0x7b [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmglobal.cxx @ 31292]
ffffa784`9fd6ee10 fffff805`2863820b : ffff9585`ecc80d60 00000000`00000000 ffffbf87`d2421f58 ffffbf87`d2421d60 : dxgmms2!VIDMM_MEMORY_SEGMENT::TransferToSegment+0x1c2 [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmlmseg.cxx @ 658]
ffffa784`9fd6ef90 fffff805`285d97d3 : ffff9585`e94d0008 00000000`00000000 ffffbf87`ebcca000 00000000`00000000 : dxgmms2!VIDMM_MEMORY_SEGMENT::CommitResource+0x19b [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmlmseg.cxx @ 1255]
ffffa784`9fd6f010 fffff805`285c48fb : ffffbf87`f409b110 ffff9585`f6d59990 00000000`00000000 ffffbf87`e58fe3d0 : dxgmms2!VIDMM_GLOBAL::PageInOneAllocation+0x763 [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmglobal.cxx @ 18215]
ffffa784`9fd6f150 fffff805`285e0f42 : ffffbf87`ecc81010 00000000`00000002 ffffbf87`e58fe3d0 00000000`00000000 : dxgmms2!VIDMM_GLOBAL::PageInFaultedAllocation+0xbb [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmglobal.cxx @ 18724]
ffffa784`9fd6f1b0 fffff805`285e100c : ffffbf87`ebcca000 ffffa784`9fd6f341 ffffbf87`e58fe301 ffffa784`9fd6f341 : dxgmms2!VIDMM_GLOBAL::PageInDeviceInternal+0x19a [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmglobal.cxx @ 18930]
ffffa784`9fd6f240 fffff805`285e123b : ffffa784`9fd6f368 00000000`00000000 ffffbf87`e58fe3d0 fffff805`285583dc : dxgmms2!VIDMM_GLOBAL::TryPageInDevice+0x50 [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmglobal.cxx @ 18674]
ffffa784`9fd6f280 fffff805`285f856a : fffff805`28599a74 ffffa784`9fd6f3f0 00000000`00000000 ffff9585`e94c5050 : dxgmms2!VIDMM_DEVICE::Resume+0x87 [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmdevice.cxx @ 1035]
ffffa784`9fd6f2f0 fffff805`285f6629 : ffff9585`e94c5050 ffffbf87`b9570001 ffffbf87`de47b301 ffffbf87`00000001 : dxgmms2!VIDMM_WORKER_THREAD::Run+0x1f2a [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmworker.cxx @ 2138]
ffffa784`9fd6f540 fffff805`2b907317 : ffffbf87`de47b3c0 fffff805`285f6620 ffff9585`e94c5050 005fe07f`b8bbbdff : dxgmms2!VidMmWorkerThreadProc+0x9 [onecoreuap\windows\core\dxkernel\dxgkrnl\dxgmms2\vidmm\mmworker.cxx @ 51]
ffffa784`9fd6f570 fffff805`2ba1bcc4 : ffffac01`0e897180 ffffbf87`de47b3c0 fffff805`2b9072c0 b30f4100`018ce185 : nt!PspSystemThreadStartup+0x57 [minkernel\ntos\ps\psexec.c @ 10885]
ffffa784`9fd6f5c0 00000000`00000000 : ffffa784`9fd70000 ffffa784`9fd69000 00000000`00000000 00000000`00000000 : nt!KiStartSystemThread+0x34 [minkernel\ntos\ke\amd64\threadbg.asm @ 83]
Ok, we’re probably waiting on a fence, which fences are usually reported with ISR + DPCs.