[PATCH v2 1/3] drm/amdgpu: Correct unlocked update fence handling

Christian König christian.koenig at amd.com
Mon Mar 28 13:37:14 UTC 2022


Am 28.03.22 um 15:35 schrieb philip yang:
>
>
> On 2022-03-28 9:14 a.m., Christian König wrote:
>> Am 28.03.22 um 15:06 schrieb Philip Yang:
>>> To fix two issues with unlocked update fence:
>>>
>>> 1. vm->last_unlocked store the latest fence without taking refcount.
>>> 2. amdgpu_vm_bo_update_mapping returns old fence, not the latest fence.
>>
>> NAK, that code here is perfectly correct.
>>
>> vm->last_unlocked gets a reference to the last unlocked operation.
>>
>> Otherwise the last locked operation is added directly to the root 
>> resv object.
>>
>> Regards,
>> Christian.
>>
>>>
>>> Signed-off-by: Philip Yang <Philip.Yang at amd.com>
>>> ---
>>>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c | 2 +-
>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c 
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c
>>> index dbb551762805..69fba68ff88e 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c
>>> @@ -109,7 +109,7 @@ static int amdgpu_vm_sdma_commit(struct 
>>> amdgpu_vm_update_params *p,
>>>       if (p->unlocked) {
>>>           struct dma_fence *tmp = dma_fence_get(f);
>>>   -        swap(p->vm->last_unlocked, f);
>>> +        swap(p->vm->last_unlocked, tmp);
>
>           dma_fence_put(tmp);
>
> tmp is the new unlock fence, so this drop the new fence refcount, fix 
> is to move the old fence to tmp, drop the old fence refcount, take the 
> new fence reference.
>
> f is return fence, because f swap to old fence, so old fence is 
> returned, not new fence, fix will not change f.
>

No, swap() will exchange the parameters a and b.

So tmp is pointing to the old fence when dma_fence_put() is called on it.

That reference counting is correct as far as I can see.

Regards,
Christian.

> Regards,
>
> Philip
>
>>>       } else {
>>>           amdgpu_bo_fence(p->vm->root.bo, f, true);
>>



More information about the amd-gfx mailing list