Op 13-05-16 om 11:16 schreef John Harrison:
> On 13/05/2016 08:39, Chris Wilson wrote:
>> On Thu, May 12, 2016 at 10:06:31PM +0100, john.c.harri...@intel.com wrote:
>>> From: John Harrison <john.c.harri...@intel.com>
>>>
>>> The fence object used inside the request structure requires a sequence
>>> number. Although this is not used by the i915 driver itself, it could
>>> potentially be used by non-i915 code if the fence is passed outside of
>>> the driver. This is the intention as it allows external kernel drivers
>>> and user applications to wait on batch buffer completion
>>> asynchronously via the dma-buff fence API.
>>>
>>> To ensure that such external users are not confused by strange things
>>> happening with the seqno, this patch adds in a per context timeline
>>> that can provide a guaranteed in-order seqno value for the fence. This
>>> is safe because the scheduler will not re-order batch buffers within a
>>> context - they are considered to be mutually dependent.
>>>
>>> v2: New patch in series.
>>>
>>> v3: Renamed/retyped timeline structure fields after review comments by
>>> Tvrtko Ursulin.
>>>
>>> Added context information to the timeline's name string for better
>>> identification in debugfs output.
>>>
>>> v5: Line wrapping and other white space fixes to keep style checker
>>> happy.
>>>
>>> v7: Updated to newer nightly (lots of ring -> engine renaming).
>>>
>>> v8: Moved to earlier in patch series so no longer needs to remove the
>>> quick hack timeline that was being added before.
>>>
>>> For: VIZ-5190
>>> Signed-off-by: John Harrison <john.c.harri...@intel.com>
>>> Cc: Tvrtko Ursulin <tvrtko.ursu...@intel.com>
>>> Cc: Maarten Lankhorst <maarten.lankho...@linux.intel.com>
>>> ---
>>>   drivers/gpu/drm/i915/i915_drv.h         | 14 ++++++++++++
>>>   drivers/gpu/drm/i915/i915_gem.c         | 40 
>>> +++++++++++++++++++++++++++++++++
>>>   drivers/gpu/drm/i915/i915_gem_context.c | 14 ++++++++++++
>>>   drivers/gpu/drm/i915/intel_lrc.c        |  8 +++++++
>>>   4 files changed, 76 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/i915/i915_drv.h 
>>> b/drivers/gpu/drm/i915/i915_drv.h
>>> index d5496ab..520480b 100644
>>> --- a/drivers/gpu/drm/i915/i915_drv.h
>>> +++ b/drivers/gpu/drm/i915/i915_drv.h
>>> @@ -818,6 +818,19 @@ struct i915_ctx_hang_stats {
>>>       bool banned;
>>>   };
>>>   +struct i915_fence_timeline {
>>> +    char        name[32];
>>> +    unsigned    fence_context;
>>> +    unsigned    next;
>>> +
>>> +    struct intel_context *ctx;
>>> +    struct intel_engine_cs *engine;
>>> +};
>>> +
>>> +int i915_create_fence_timeline(struct drm_device *dev,
>>> +                   struct intel_context *ctx,
>>> +                   struct intel_engine_cs *ring);
>>> +
>>>   /* This must match up with the value previously used for execbuf2.rsvd1. 
>>> */
>>>   #define DEFAULT_CONTEXT_HANDLE 0
>>>   @@ -869,6 +882,7 @@ struct intel_context {
>>>           u64 lrc_desc;
>>>           uint32_t *lrc_reg_state;
>>>           bool initialised;
>>> +        struct i915_fence_timeline fence_timeline;
>> This is still fundamentally wrong. This i915_fence_timeline is both the
>> fence context and timeline. Our timelines are singular per vm, with a
>> fence context under each timeline per engine.
> As I said last time you mentioned 'per vm', please explain. Where does a 
> virtual machine come in? Or is that not what you mean? What is the purpose of 
> having multiple fence contexts within a single timeline? It will stop 
> external uses attempting to combine fences but it won't stop them from 
> actually being out of order. The timeline needs to be per hardware context 
> not simply per engine because the whole point is that requests should not be 
> re-ordered once they have been allocated a point on a timeline. However, the 
> purpose of the scheduler (which is what this series is preparation for) is to 
> re-order requests between contexts. Thus the timeline must be per context to 
> prevent requests ending up with out of order completions.

Virtual memory, not machine. Guessing i915_address_space :-)

Fence contexts may not have to be bound to a single timeline, lets say you have 
2 engines, running commands for Com1 and Com2.

ENG1: Com1.1
ENG2: Com2.1 Com1.2 Com1.3

then there's no harm if you end up with multiple fence contexts since they're 
independently executing.

>
>> Please complete the legacy/execlists unification first so that we can
>> have timelines work correctly for the whole driver.
> No. That is a much larger task that people are working towards. However, we 
> urgently need a scheduler for specific customers to use right now. That means 
> we need to get something working right now not in some random number of years 
> time. If an intermediate step is less than perfect but still functional that 
> is better than not having anything at all.
>
>> -Chris
>>
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx


_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to