[PATCH] drm/amdgpu: use dep_sync for CS dependency/syncobj
Chunming Zhou
zhoucm1 at amd.com
Mon Nov 13 09:34:47 UTC 2017
On 2017年11月13日 17:31, Christian König wrote:
> Am 13.11.2017 um 09:05 schrieb Chunming Zhou:
>>
>>
>> On 2017年11月13日 15:51, Christian König wrote:
>>> Am 13.11.2017 um 03:53 schrieb Chunming Zhou:
>>>> Otherwise, they could be optimized by scheduled fence.
>>>>
>>>> Change-Id: I6857eee20aebeaad793d9fe4e1b5222f1be7470e
>>>> Signed-off-by: Chunming Zhou <david1.zhou at amd.com>
>>>
>>> First of all patch is Reviewed-by: Christian König
>>> <christian.koenig at amd.com>.
>> Thanks.
>>
>>>
>>> Second do you remember why we did this? I have some brief memory in
>>> my head that a certain CTS test failed because we didn't completely
>>> synchronized between dependencies explicit added by a semaphore.
>> Yes, exactly, vulkan cts could fail for some semaphore case, which is
>> to sync two job with different context but same process and same
>> engine. Although two jobs are series in hw ring, their executions are
>> in parallel, which could result in hang.
>
> Ah, now I remember. Yeah the problem is that the two job executions
> overlap and we need to insert an pipeline sync between them.
>
>>
>>>
>>> Then can we narrow this down into a unit test for libdrm? Probably
>>> not so easy to reproduce otherwise.
>> Also yes, this is occasional issue, it's not very easy to reproduce.
>
> Yeah, we would need to do something like job 1 writes a value A to
> memory location X using shaders, then job 2 write to the same location
> value B using the CP.
>
> Then send both with a semaphore dependency between the two. If
> everything works like expected we see value B, but if we don't wait
> for the shaders to finish before running job 2 we see value A.
>
> Do you have time to put all this into a unit tests? I think that would
> be important to make sure we don't break it again in the future.
>
> Otherwise Andrey can probably take a look.
OK, feel free to assign.
Thanks,
David Zhou
>
> Regards,
> Christian.
>
>>
>> Regards,
>> David Zhou
>>>
>>> Thanks,
>>> Christian.
>>>
>>>> ---
>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 4 ++--
>>>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
>>>> index 673fb9f4301e..4a2af571d35f 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
>>>> @@ -1078,7 +1078,7 @@ static int amdgpu_cs_process_fence_dep(struct
>>>> amdgpu_cs_parser *p,
>>>> amdgpu_ctx_put(ctx);
>>>> return r;
>>>> } else if (fence) {
>>>> - r = amdgpu_sync_fence(p->adev, &p->job->sync,
>>>> + r = amdgpu_sync_fence(p->adev, &p->job->dep_sync,
>>>> fence);
>>>> dma_fence_put(fence);
>>>> amdgpu_ctx_put(ctx);
>>>> @@ -1103,7 +1103,7 @@ static int
>>>> amdgpu_syncobj_lookup_and_add_to_sync(struct amdgpu_cs_parser *p,
>>>> if (r)
>>>> return r;
>>>> - r = amdgpu_sync_fence(p->adev, &p->job->sync, fence);
>>>> + r = amdgpu_sync_fence(p->adev, &p->job->dep_sync, fence);
>>>> dma_fence_put(fence);
>>>> return r;
>>>
>>>
>>
>> _______________________________________________
>> amd-gfx mailing list
>> amd-gfx at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
>
>
More information about the amd-gfx
mailing list