[Intel-gfx] [PATCH v7 0/8] Convert requests to use struct fence

John Harrison John.C.Harrison at Intel.com
Fri Apr 22 15:37:10 UTC 2016


This patch series can be pulled from 
'ssh://people.freedesktop.org/~johnharr/scheduler' as the 'fence' branch.


On 20/04/2016 18:09, John.C.Harrison at Intel.com wrote:
> From: John Harrison <John.C.Harrison at Intel.com>
>
> There is a construct in the linux kernel called 'struct fence' that is
> intended to keep track of work that is executed on hardware. I.e. it
> solves the basic problem that the drivers 'struct
> drm_i915_gem_request' is trying to address. The request structure does
> quite a lot more than simply track the execution progress so is very
> definitely still required. However, the basic completion status side
> could be updated to use the ready made fence implementation and gain
> all the advantages that provides.
>
> Using the struct fence object also has the advantage that the fence
> can be used outside of the i915 driver (by other drivers or by
> userland applications). That is the basis of the dma-buff
> synchronisation API and allows asynchronous tracking of work
> completion. In this case, it allows applications to be signalled
> directly when a batch buffer completes without having to make an IOCTL
> call into the driver.
>
> Note that in order to allow the full fence API to be used (e.g.
> merging multiple fences together), the driver needs to provide an
> incrementing timeline for the fence. Currently this timeline is
> specific to the fence code as it must be per context. There is future
> work planned to make the driver's internal seqno value also be per
> context rather than driver global (VIZ-7443). Once this is done the
> fence specific timeline code can be dropped in favour of just using
> the driver's seqno value.
>
> This is work that was planned since the conversion of the driver from
> being seqno value based to being request structure based. This patch
> series does that work.
>
> An IGT test to exercise the fence support from user land is in
> progress and will follow. Android already makes extensive use of
> fences for display composition. Real world linux usage is planned in
> the form of Jesse's page table sharing / bufferless execbuf support.
> There is also a plan that Wayland (and others) could make use of it in
> a similar manner to Android.
>
> v2: Updated for review comments by various people and to add support
> for Android style 'native sync'.
>
> v3: Updated from review comments by Tvrtko Ursulin. Also moved sync
> framework out of staging and improved request completion handling.
>
> v4: Fixed patch tag (should have been PATCH not RFC). Corrected
> ownership of one patch which had passed through many hands before
> reaching me. Fixed a bug introduced in v3 and updated for review
> comments.
>
> v5: Removed de-staging and further updates to Android sync code. The
> de-stage is now being handled by someone else. The sync integration to
> the i915 driver will be a separate patch set that can only land after
> the external de-stage has been completed.
>
> Assorted changes based on review comments and style checker fixes.
> Most significant change is fixing up the fake lost interrupt support
> for the 'drv_missed_irq_hang' IGT test and improving the wait request
> latency.
>
> v6: Updated to newer nigthly and resolved conflicts around updates
> to the wait_request optimisations.
>
> v7: Updated to newer nightly and resolved conflicts around massive
> ring -> engine rename and interface change to get_seqno(). Also fixed
> up a race condition issue with stale request pointers in file client
> lists and added a minor optimisation to not acquire spinlocks when a
> list is empty and does not need processing.
>
> [Patches against drm-intel-nightly tree fetched 13/04/2016]
>
> John Harrison (8):
>    drm/i915: Convert requests to use struct fence
>    drm/i915: Removed now redudant parameter to i915_gem_request_completed()
>    drm/i915: Add per context timelines to fence object
>    drm/i915: Fix clean up of file client list on execbuff failure
>    drm/i915: Delay the freeing of requests until retire time
>    drm/i915: Interrupt driven fences
>    drm/i915: Updated request structure tracing
>    drm/i915: Cache last IRQ seqno to reduce IRQ overhead
>
>   drivers/gpu/drm/i915/i915_debugfs.c        |   7 +-
>   drivers/gpu/drm/i915/i915_drv.h            |  74 +++--
>   drivers/gpu/drm/i915/i915_gem.c            | 443 ++++++++++++++++++++++++++---
>   drivers/gpu/drm/i915/i915_gem_context.c    |  14 +
>   drivers/gpu/drm/i915/i915_gem_execbuffer.c |   6 +-
>   drivers/gpu/drm/i915/i915_irq.c            |   3 +-
>   drivers/gpu/drm/i915/i915_trace.h          |  14 +-
>   drivers/gpu/drm/i915/intel_display.c       |   4 +-
>   drivers/gpu/drm/i915/intel_lrc.c           |  13 +
>   drivers/gpu/drm/i915/intel_pm.c            |   6 +-
>   drivers/gpu/drm/i915/intel_ringbuffer.c    |   5 +
>   drivers/gpu/drm/i915/intel_ringbuffer.h    |  12 +
>   12 files changed, 513 insertions(+), 88 deletions(-)
>



More information about the Intel-gfx mailing list