HsaGetPageFault
INT64 __fastcall HsaGetPageFault(
UINT64 *a1,
UINT16 *BugCheckParameter2,
_DWORD *a3,
_QWORD *a4,
INT64 a5,
INT64 a6,
INT64 a7,
INT64 a8){
UINT64 v8;
_QWORD *v11;
UINT64 v12;
__int64 v13;
unsigned __int64 v14;
unsigned __int64 v15;
__int64 v16;
_OWORD *v17;
int v18;
int v19;
int v20;
ULONG_PTR v21;
__int64 v22;
__int64 v23;
__int64 v24;
unsigned __int64 v26;
signed __int32 v27[8];
ULONG_PTR BugCheckParameter4;
UINT64 v29;
v8 = a1[12];
v11 = (_QWORD *)*a1;
v29 = v8;
v12 = a1[14] >> 4;
while( 1 )
{
while( 1 )
{
v13 = v11[1028];
v14 = v11[1030];
v15 = v14 >> 4;
v16 = (v14 >> 4) & 0x7FFF;
if( v16 == ((v11[1031] >> 4) & 0x7FFFi64) )
break;
v17 = (_OWORD *)(v8 + 16 * v16);
v18 = (v15 & 0x7FFF) + 1;
v19 = 0;
*(_OWORD *)BugCheckParameter2 = *v17;
if( !*(_QWORD *)BugCheckParameter2 )
{
do
{
if( *((_QWORD *)BugCheckParameter2 + 1) )
break;
KeStallExecutionProcessor(0xAu);
if( (unsigned int)++v19 > 0x186A0 )
KeBugCheckEx(
0x159u,
0x2000ui64,
(ULONG_PTR)BugCheckParameter2,
*(_QWORD *)BugCheckParameter2,
*((_QWORD *)BugCheckParameter2 + 1));
*(_OWORD *)BugCheckParameter2 = *v17;
}
while( !*(_QWORD *)BugCheckParameter2 );
v18 = (v15 & 0x7FFF) + 1;
v8 = v29;
if( v19 )
++AmdErrataPprWriteOrderMitigated;
}
*v17 = 0i64;
v20 = 0;
if( v18 != (_DWORD)v12 )
v20 = v15 + 1;
v11[1030] = v14 ^ ((unsigned int)v14 ^ (16 * v20)) & 0x7FFF0;
_InterlockedOr(v27, 0);
v21 = *(_QWORD *)BugCheckParameter2;
if( *(_QWORD *)BugCheckParameter2 >> 60 == 1 && (v21 & 0x40000000000000i64) != 0 )
{
if( (v21 & 0x24020000000000i64) != 0x20000000000i64 )
{
*a3 = BugCheckParameter2[1];
*(_WORD *)a5 = HIDWORD(*(_QWORD *)BugCheckParameter2) & 0x1FF;
*(_DWORD *)a6 = 0;
*(_QWORD *)a7 = *((_QWORD *)BugCheckParameter2 + 1);
*a4 = (unsigned __int16)*(_DWORD *)BugCheckParameter2;
v22 = (2 * ((*(_QWORD *)BugCheckParameter2 >> 53) & 1i64)) | 1;
if( (*(_QWORD *)BugCheckParameter2 & 0x4000000000000i64) == 0 )
v22 = 2 * ((*(_QWORD *)BugCheckParameter2 >> 53) & 1i64);
v23 = v22 | 4;
if( (*(_QWORD *)BugCheckParameter2 & 0x2000000000000i64) == 0 )
v23 = v22;
v24 = v23 | 0x10;
if( (*(_QWORD *)BugCheckParameter2 & 0x20000000000i64) == 0 )
v24 = v23;
*(_QWORD *)a8 = v24;
return 1i64;
}
}
else
{
LODWORD(BugCheckParameter4) = 0;
HsaDismissPageFault(a1, BugCheckParameter2, 3221225473i64);
v8 = v29;
}
}
if( (v13 & 0x20) == 0 )
break;
if( (v13 & 0x80u) == 0i64 )
{
v26 = v11[3] & 0xFFFFFFFFFFFFDFFFui64;
v11[3] = v26;
_InterlockedOr(v27, 0);
v11[1028] = 32i64;
_InterlockedOr(v27, 0);
v11[3] = v26 | 0x6000;
_InterlockedOr(v27, 0);
*a3 = -1;
*(_WORD *)a5 = -1;
*(_DWORD *)a6 = 0;
*(_QWORD *)a7 = 0i64;
*(_QWORD *)a8 = 64i64;
*a4 = 0i64;
return 1i64;
}
while( (v11[1028] & 0x80u) != 0i64 )
;
}
return 0i64;
}Referenced by:
No references.