PipDmgFlushQueueAndRestartDevices

INT64 *__stdcall PipDmgFlushQueueAndRestartDevices(){
  __int64 v0; 
  INT64 v1; 
  PVOID *v2; 
  PVOID v3; 
  INT64 *result; 
  _QWORD *v5; 
  PVOID P[2]; 

  if( !PipDmaGuardPolicy || PipDmaGuardPolicy == 3 )
    KeBugCheckEx(0xCAu, (PVOID)0x11, 0i64, 0i64, 0i64);
  P[1] = P;
  P[0] = P;
  PiDmaGuardQueueFlush((__int64)P, v0, v1);
  v2 = (PVOID *)P[0];
  if( P[0] == P )
    goto LABEL_6;
  do
  {
    v3 = v2[2];
    v2 = (PVOID *)*v2;
    PipDmgRequestRestartOnBlockedDevice(v3);
  }
  while( v2 != P );
  while( 1 )
  {
    v2 = (PVOID *)P[0];
LABEL_6:
    result = (INT64 *)P;
    if( v2 == P )
      break;
    if( v2[1] != P || (v5 = *v2, *((PVOID **)*v2 + 1) != v2) )
      __fastfail(3u);
    P[0] = *v2;
    v5[1] = P;
    PipDgqFreeEntry(v2);
  }
  return result;
}

Referenced by:

PipDmgConsoleUnlockCallback
PipDmgReevaluateQueue