[PATCH 3/8] drm/amdgpu: make VMID owner none atomic
Christian König
ckoenig.leichtzumerken at gmail.com
Thu Feb 1 08:40:24 UTC 2018
Am 01.02.2018 um 06:44 schrieb Chunming Zhou:
>
>
> On 2018年01月31日 23:47, Christian König wrote:
>> The variable is protected by the VMID mutex anyway.
>>
>> Signed-off-by: Christian König <christian.koenig at amd.com>
>> ---
>> drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c | 10 +++++-----
>> drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h | 2 +-
>> 2 files changed, 6 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
>> index fbe958f7cb5b..8374fe870e8c 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
>> @@ -267,7 +267,7 @@ static int
>> amdgpu_vmid_grab_reserved_locked(struct amdgpu_vm *vm,
>> flushed = id->flushed_updates;
>> if ((amdgpu_vmid_had_gpu_reset(adev, id)) ||
>> - (atomic64_read(&id->owner) != vm->entity.fence_context) ||
>> + (id->owner != vm->entity.fence_context) ||
>> (job->vm_pd_addr != id->pd_gpu_addr) ||
>> (updates && (!flushed || updates->context !=
>> flushed->context ||
>> dma_fence_is_later(updates, flushed))) ||
>> @@ -296,7 +296,7 @@ static int
>> amdgpu_vmid_grab_reserved_locked(struct amdgpu_vm *vm,
>> id->flushed_updates = dma_fence_get(updates);
>> }
>> id->pd_gpu_addr = job->vm_pd_addr;
>> - atomic64_set(&id->owner, vm->entity.fence_context);
>> + id->owner = vm->entity.fence_context;
>> job->vm_needs_flush = needs_flush;
>> if (needs_flush) {
>> dma_fence_put(id->last_flush);
>> @@ -353,7 +353,7 @@ int amdgpu_vmid_grab(struct amdgpu_vm *vm, struct
>> amdgpu_ring *ring,
>> if (amdgpu_vmid_had_gpu_reset(adev, id))
>> continue;
>> - if (atomic64_read(&id->owner) != vm->entity.fence_context)
>> + if (id->owner != vm->entity.fence_context)
>> continue;
>> if (job->vm_pd_addr != id->pd_gpu_addr)
>> @@ -402,7 +402,7 @@ int amdgpu_vmid_grab(struct amdgpu_vm *vm, struct
>> amdgpu_ring *ring,
>> id->pd_gpu_addr = job->vm_pd_addr;
>> dma_fence_put(id->flushed_updates);
>> id->flushed_updates = dma_fence_get(updates);
>> - atomic64_set(&id->owner, vm->entity.fence_context);
>> + id->owner = vm->entity.fence_context;
>> needs_flush:
>> job->vm_needs_flush = true;
>> @@ -482,7 +482,7 @@ void amdgpu_vmid_reset(struct amdgpu_device
>> *adev, unsigned vmhub,
>> struct amdgpu_vmid_mgr *id_mgr = &adev->vm_manager.id_mgr[vmhub];
>> struct amdgpu_vmid *id = &id_mgr->ids[vmid];
>> - atomic64_set(&id->owner, 0);
>> + id->owner = 0;
> here is not protect by id_mgr mutex, you can make another patch to add
> mutex for this function.
That function is only called in case of suspend/resume and GPU reset,
but adding the extra mutex here probably won't hurt and is indeed cleaner.
Christian.
>
> Regards,
> David Zhou
>> id->gds_base = 0;
>> id->gds_size = 0;
>> id->gws_base = 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h
>> index 38f37c16fc5e..20d4eca6cd6a 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h
>> @@ -43,7 +43,7 @@ struct amdgpu_vmid {
>> struct list_head list;
>> struct amdgpu_sync active;
>> struct dma_fence *last_flush;
>> - atomic64_t owner;
>> + uint64_t owner;
>> uint64_t pd_gpu_addr;
>> /* last flushed PD/PT update */
>
More information about the amd-gfx
mailing list