[Intel-gfx] [PATCH v5 06/10] drm/i915: add syncobj timeline support

Lionel Landwerlin lionel.g.landwerlin at intel.com
Thu Jun 27 11:10:57 UTC 2019


On 27/06/2019 13:59, Chris Wilson wrote:
> Quoting Lionel Landwerlin (2019-06-27 11:49:56)
>> Thanks a lot for your comments.
>>
>> On 27/06/2019 12:15, Chris Wilson wrote:
>>>> +               syncobj = drm_syncobj_find(eb->file, user_fence.handle);
>>>> +               if (!syncobj) {
>>>> +                       DRM_DEBUG("Invalid syncobj handle provided\n");
>>>> +                       err = -EINVAL;
>>>> +                       goto err;
>>>> +               }
>>>> +
>>>> +               if (user_fence.flags & I915_EXEC_FENCE_WAIT) {
>>>> +                       fence = drm_syncobj_fence_get(syncobj);
>>>> +                       if (!fence) {
>>>> +                               DRM_DEBUG("Syncobj handle has no fence\n");
>>>> +                               drm_syncobj_put(syncobj);
>>>> +                               err = -EINVAL;
>>>> +                               goto err;
>>>> +                       }
>>>> +
>>>> +                       err = dma_fence_chain_find_seqno(&fence, point);
>>> Is an imported syncobj always a fence-chain?
>>>
>>> drm_syncobj_import_sync_file_fence() says no.
>>
>> drm_syncobj_import_sync_file_fence() would turn a timeline semaphore
>> into a binary semaphore by breaking the chain.
>>
>> drm_syncobj_transfer_to_timeline() is what you should use if you wish to
>> import a fence into the timeline.
> What I am worrying about is the legality of the user passing in a
> non-timeline fence here. It looks like the interface will itself
> generate non-timeline fences... Oh, ignore me, I overlooked the early
> return for !seqno.


I wrote that down in my reply then deleted it ;)


>
> So timelines are not allowed to use 0. Ever. That's a bit more of a hard
> rule than implied by the uapi.h :)


Anv turns any signal/wait on 0 into NOOP, those never reach i915.

The spec is pretty clear that point 0 is always signaled.


I'll add a statement with regard to timeline semaphores.


Thanks!


-Lionel


>
>>>> @@ -1014,9 +1020,40 @@ struct drm_i915_gem_exec_fence {
>>>>    };
>>>>    
>>>>    enum drm_i915_gem_execbuffer_ext {
>>>> +       /**
>>>> +        * This identifier is associated with
>>>> +        * drm_i915_gem_execbuf_ext_timeline_fences.
>>> Or just "See drm_i915_gem_execbuf_ext_timeline_fences
>>>> +        */
>>>> +       DRM_I915_GEM_EXECBUFFER_EXT_TIMELINE_FENCES,
>>>    = 0
>>> don't leave it up to the compiler.
>>
>> Should we set every single item in the enum or just the first one?
> We've been setting the first one to be explicit (doubly useful when we
> want a certain value to be documented to be 0), and then gaps. The spec
> says that each id is incremented by one from the previous, it's just the
> first value and natural type of the enum is up to the compiler.
> -Chris
>



More information about the Intel-gfx mailing list