mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 08:33:17 +02:00
drm/amdkfd: Use atomic64_t type for pdd->tlb_seq
To support multi-thread update page table. Signed-off-by: Philip Yang <Philip.Yang@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
4499c90e90
commit
8fde0248a3
|
|
@ -705,7 +705,7 @@ struct kfd_process_device {
|
|||
/* VM context for GPUVM allocations */
|
||||
struct file *drm_file;
|
||||
void *drm_priv;
|
||||
uint64_t tlb_seq;
|
||||
atomic64_t tlb_seq;
|
||||
|
||||
/* GPUVM allocations storage */
|
||||
struct idr alloc_idr;
|
||||
|
|
|
|||
|
|
@ -1560,7 +1560,7 @@ int kfd_process_device_init_vm(struct kfd_process_device *pdd,
|
|||
return ret;
|
||||
}
|
||||
pdd->drm_priv = drm_file->private_data;
|
||||
pdd->tlb_seq = 0;
|
||||
atomic64_set(&pdd->tlb_seq, 0);
|
||||
|
||||
ret = kfd_process_device_reserve_ib_mem(pdd);
|
||||
if (ret)
|
||||
|
|
@ -1954,10 +1954,14 @@ void kfd_flush_tlb(struct kfd_process_device *pdd, enum TLB_FLUSH_TYPE type)
|
|||
uint64_t tlb_seq = amdgpu_vm_tlb_seq(vm);
|
||||
struct kfd_dev *dev = pdd->dev;
|
||||
|
||||
if (pdd->tlb_seq == tlb_seq)
|
||||
/*
|
||||
* It can be that we race and lose here, but that is extremely unlikely
|
||||
* and the worst thing which could happen is that we flush the changes
|
||||
* into the TLB once more which is harmless.
|
||||
*/
|
||||
if (atomic64_xchg(&pdd->tlb_seq, tlb_seq) == tlb_seq)
|
||||
return;
|
||||
|
||||
pdd->tlb_seq = tlb_seq;
|
||||
if (dev->dqm->sched_policy == KFD_SCHED_POLICY_NO_HWS) {
|
||||
/* Nothing to flush until a VMID is assigned, which
|
||||
* only happens when the first queue is created.
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user