HsaGrowPasidTable
INT64 __fastcall HsaGrowPasidTable(INT64 a1, INT64 a2, UINT64 a3){
unsigned int v3;
unsigned __int64 *v6;
VOID *PoolWithTag;
unsigned int v8;
unsigned int v9;
VOID *v10;
void *v11;
v3 = a3;
if( (unsigned int)a3 >= 0x40000 )
return 3221225659i64;
v6 = *(unsigned __int64 **)(a2 + 40);
if( !v6 )
{
PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, 0x2000ui64, 0x61734848ui64);
*(_QWORD *)(a2 + 40) = PoolWithTag;
if( !PoolWithTag )
return 3221225626i64;
memset((INT64)PoolWithTag, 0i64);
v6 = *(unsigned __int64 **)(a2 + 40);
}
v8 = 0;
v9 = v3 >> 9;
do
{
if( (*(_BYTE *)v6 & 1) == 0 )
{
v10 = ExAllocatePoolWithTag(NonPagedPoolNx, 0x1000ui64, 0x61734848ui64);
v11 = v10;
if( !v10 )
return 3221225626i64;
memset((INT64)v10, 0i64);
v6[512] = (unsigned __int64)v11;
*v6 = *v6 ^ (*v6 ^ MmGetPhysicalAddress(v11).QuadPart & 0xFFFFFFFFFFFFF000ui64) & 0xFFFFFFFFFF000i64 | 1;
}
++v8;
++v6;
}
while( v8 <= v9 );
return 0i64;
}Referenced by:
No references.