[RFC] Host1x/TegraDRM UAPI
Mikko Perttunen
cyndis at kapsi.fi
Thu Jun 25 09:23:17 UTC 2020
On 6/25/20 3:47 AM, Dmitry Osipenko wrote:
> 23.06.2020 15:09, Mikko Perttunen пишет:
>> #define DRM_TEGRA_SUBMIT_CREATE_POST_SYNC_FILE (1<<0)
>> #define DRM_TEGRA_SUBMIT_CREATE_POST_SYNCOBJ (1<<1)
>
> The sync object shouldn't be created by the kernel driver and we
> shouldn't need the sync-file FD.
>
> Please consider this example of how syncobj may be used:
>
> 1. Syncobj is created by userspace.
>
> 2. Syncobj's handle (post_fence) is passed with the job to the kernel
> driver.
>
> 3. Userspace waits on syncobj for the job's submission.
>
> 4. Kernel driver attaches job-completion dma-fence(s) to the syncobj
> after starting to execute the job.
>
> 5. Userspace waits on syncobj for the job's completion.
>
> Syncobj is a superset of the sync-file fence:
>
> a) Syncobj doesn't have a backing file descriptor when it's created.
> For example, why would you need an FD if you're not going to share fence
> with other processes. It's possible to get FD out of syncobj later on,
> please see [1][2].
>
> b) Syncobj is designed to be used with a GPU jobs. For example,
> userspace passes job to the GPU driver's scheduler and then waits until
> job has been started to execute on hardware, this is already supported
> by syncobj.
>
> c) It is possible to attach sync-file's fence to a syncobj [1][2][3]
> and now:
>
> - Userspace may attach sync-file's fence to a syncobj.
>
> - Userspace may use this syncobj for the job's pre-fence.
>
> - Kernel driver will take out the pre-fence from the syncobj during of
> the job's submission and reset the syncobj's fence to NULL.
>
> - Job's scheduler will wait on this pre-fence before starting to
> execute job.
>
> - Once the job is started to execute, the job's scheduler will attach
> the job's completion-fence to the syncobj. Now syncobj has a post-fence!
>
> d) It is possible to get sync-file FD out of syncobj [1][2][4].
>
> [1]
> https://elixir.bootlin.com/linux/v5.7.2/source/include/uapi/drm/drm.h#L730
> [2]
> https://elixir.bootlin.com/linux/v5.7.2/source/include/uapi/drm/drm.h#L933
> [3]
> https://elixir.bootlin.com/linux/v5.7.2/source/drivers/gpu/drm/drm_syncobj.c#L653
> [4]
> https://elixir.bootlin.com/linux/v5.7.2/source/drivers/gpu/drm/drm_syncobj.c#L674
>
> ===
>
> So, sync object can carry both pre-fence and post-fence, and they could
> be sync-file FDs!
>
> The corollary is that we can get away by using a single syncobj handle
> for the job's submission IOCTL.
>
Ah, clearly I hadn't understood syncobjs properly :) Last time I spent
significant time with this they didn't exist yet.. I'll check this out.
Mikko
More information about the dri-devel
mailing list