HsaFreeRemappingTableEntry

NTSTATUS __stdcall HsaFreeRemappingTableEntry(UINT64 *a1, UINT64 a2, INT64 a3){
  char v3; 
  int v4; 
  UINT64 **v6; 
  UINT64 **v7; 
  NTSTATUS v8; 
  bool v9; 
  UINT64 v10; 
  unsigned __int64 v11; 
  INT64 v12; 
  __int128 v14; 
  __int128 v15; 
  UINT64 v16; 

  v14 = 0i64;
  v3 = 0;
  LODWORD(v15) = 0;
  v16 = 0i64;
  v4 = a3;
  if( (unsigned int)a2 >> 9 >= *(&CmpDummyThreadEvent + 805) || (a2 & 0x1FF) + (unsigned int)a3 > 0x200 )
  {
    v8 = -1073741811;
  }
  else
  {
    HsaGetDeviceAperture((unsigned int)a2);
    v7 = v6;
    if( *v6 != a1 )
      return -1073741594;
    *(&CmpDummyThreadEvent + 3160) = HalpAcquireHighLevelLock((UINT64 *)&CmpDummyThreadEvent + 394);
    v9 = *((_DWORD *)v7 + 12) == v4;
    *((_DWORD *)v7 + 12) -= v4;
    if( v9 )
    {
      HsaUpdateRemappingTableInDeviceTableEntry(a1, *((unsigned int *)v7 + 13), (UINT8 *)&CmpDummyThreadEvent + 3168);
      v3 = 1;
      v15 = *(_OWORD *)(v7 + 3);
      v14 = *(_OWORD *)(v7 + 1);
      v10 = (UINT64)v7[5];
      *(_OWORD *)v7 = 0i64;
      *((_OWORD *)v7 + 1) = 0i64;
      *((_OWORD *)v7 + 2) = 0i64;
      v7[6] = 0i64;
      v16 = v10;
    }
    v11 = *(&CmpDummyThreadEvent + 3160);
    KxReleaseSpinLock((UINT64 *)&CmpDummyThreadEvent + 394);
    __writecr8(v11);
    v8 = 0;
  }
  if( v3 )
  {
    if( *((_QWORD *)&v14 + 1) == *(&CmpDummyThreadEvent + 397) )
      ExtEnvCriticalFailure((INT64)a1, 0i64, 0i64, 0i64, 0);
    ExtEnvFreePhysicalMemory((INT64)a1, *((VOID **)&v14 + 1), (unsigned int)v15, 1ui64);
    ExtEnvFreeMemory(v12, v16);
  }
  return v8;
}

Referenced by:

No references.