[PATCH 1/3] [RFC]drm: add syncobj timeline support v4
Christian König
christian.koenig at amd.com
Thu Sep 13 06:55:45 UTC 2018
Am 13.09.2018 um 04:15 schrieb zhoucm1:
> On 2018年09月12日 19:05, Christian König wrote:
>>>>>
>>>>>> [SNIP]
>>>>>> +static void drm_syncobj_find_signal_pt_for_wait_pt(struct
>>>>>> drm_syncobj *syncobj,
>>>>>> + struct drm_syncobj_wait_pt *wait_pt)
>>>>>> +{
>>>>>
>>>>> That whole approach still looks horrible complicated to me.
>>> It's already very close to what you said before.
>>>
>>>>>
>>>>> Especially the separation of signal and wait pt is completely
>>>>> unnecessary as far as I can see.
>>>>> When a wait pt is requested we just need to search for the signal
>>>>> point which it will trigger.
>>> Yeah, I tried this, but when I implement cpu wait ioctl on specific
>>> point, we need a advanced wait pt fence, otherwise, we could still
>>> need old syncobj cb.
>>
>> Why? I mean you just need to call drm_syncobj_find_fence() and when
>> that one returns NULL you use wait_event_*() to wait for a signal
>> point >= your wait point to appear and try again.
> e.g. when there are 3 syncobjs(A,B,C) to wait, all syncobjABC have no
> fence yet, as you said, during drm_syncobj_find_fence(A) is working on
> wait_event, syncobjB and syncobjC could already be signaled, then we
> don't know which one is first signaled, which is need when wait ioctl
> returns.
I don't really see a problem with that. When you wait for the first one
you need to wait for A,B,C at the same time anyway.
So what you do is to register a fence callback on the fences you already
have and for the syncobj which doesn't yet have a fence you make sure
that they wake up your thread when they get one.
So essentially exactly what drm_syncobj_fence_get_or_add_callback()
already does today.
Regards,
Christian.
>
> Back to my implementation, it already fixes all your concerns before,
> and can be able to easily used in wait_ioctl. When you feel that is
> complicated, I guess that is because we merged all logic to that and
> much clean up in one patch. In fact, it already is very simple,
> timeline_init/fini, create signal/wait_pt, find signal_pt for wait_pt,
> garbage collection, just them.
>
> Thanks,
> David Zhou
>>
>> Regards,
>> Christian.
More information about the amd-gfx
mailing list