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.