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