[PATCH] drm/syncobj: add sync obj wait interface. (v6)
Jason Ekstrand
jason at jlekstrand.net
Wed Jul 12 17:02:31 UTC 2017
On Wed, Jul 12, 2017 at 9:45 AM, Christian König <deathsimple at vodafone.de>
wrote:
> Am 12.07.2017 um 17:53 schrieb Jason Ekstrand:
>
> [SNIP]
>
>
>> Is that easier than just waiting in the kernel, I'm not sure how
>> optimised we need this path to be.
>>
>
> I don't think so. I think it's more-or-less the same code regardless of
> how it's done. The advantage of doing it in the kernel is that it's
> standardized (we don't have to both go write that userspace code) and it
> doesn't have the problems stated above.
>
>
> Ok, I'm convinced. The next price question is then how do we do it?
>
> I mean writing an IOCTL to wait for a fence to appear is simple, but do we
> also need to wait for a fence to change?
>
I don't think so. Taking a page from the Vulkan book, I think the "right"
thing to do would be to have a reset ioctl that simply deletes the
dma_fence and replaces it with NULL. Then the only behavior you care about
is "wait for a fence to appear". The usage pattern becomes:
1) Submit work to signal the syncobj
2) Wait on the syncobj (this may happen before the submit)
3) Once everyone is done waiting, reset the syncobj
If someone does a wait on a stale syncobj that has completed and not yet
been reset, they return immediately. Yes, there is a possible race between
2 and 3, especially if 2 is waiting on multiple syncobjs. Ideally, we'd
make it so that a reset in the middle of someone else's wait wouldn't cause
them to wait until that syncobj gets triggerd a second time. However, I
don't think it's a deal-breaker as any client that sets the "wait for
submit" flag should know that it's liable to wait forever and set a timeout.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20170712/c0251bd3/attachment.html>
More information about the amd-gfx
mailing list