HsaUpdateRemappingTableInDeviceTableEntry
NTSTATUS __stdcall HsaUpdateRemappingTableInDeviceTableEntry(UINT64 *a1, UINT64 a2, UINT8 *a3){
unsigned int v4;
unsigned __int8 CurrentIrql;
_OWORD *v7;
__int128 v8;
__int64 v9;
INT64 v10;
NTSTATUS result;
int v12[8];
_KLOCK_QUEUE_HANDLE LockQueue;
INT64 v14[2];
__int128 v15;
*(_QWORD *)&LockQueue.OldIrql = 0i64;
v4 = a2;
CurrentIrql = KeGetCurrentIrql();
__writecr8(0xFui64);
LockQueue.LockQueue.Next = 0i64;
LockQueue.LockQueue.Lock = a1 + 19;
KxAcquireQueuedSpinLock(&LockQueue.LockQueue, a1 + 19);
v7 = (_OWORD *)(a1[3] + 32i64 * v4);
v8 = v7[1];
*(_OWORD *)v14 = *v7;
v15 = v8;
HsaBuildInterruptRemappingEntry((INT64)a1, (INT64)a3, (INT64)v14);
*(_QWORD *)(v9 + 16) = v15;
_InterlockedOr(v12, 0);
HsaInvalidateRemappingTableEntries(a1, v10, (UINT8 *)1);
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockQueue);
result = CurrentIrql;
__writecr8(CurrentIrql);
return result;
}Referenced by:
HsaAllocateRemappingTableEntry
HsaFreeRemappingTableEntry