• Chris Wilson's avatar
    drm/i915: Squash repeated awaits on the same fence · 47979480
    Chris Wilson authored
    Track the latest fence waited upon on each context, and only add a new
    asynchronous wait if the new fence is more recent than the recorded
    fence for that context. This requires us to filter out unordered
    timelines, which are noted by DMA_FENCE_NO_CONTEXT. However, in the
    absence of a universal identifier, we have to use our own
    i915->mm.unordered_timeline token.
    
    v2: Throw around the debug crutches
    v3: Inline the likely case of the pre-allocation cache being full.
    v4: Drop the pre-allocation support, we can lose the most recent fence
    in case of allocation failure -- it just means we may emit more awaits
    than strictly necessary but will not break.
    v5: Trim allocation size for leaf nodes, they only need an array of u32
    not pointers.
    v6: Create mock_timeline to tidy selftest writing
    v7: s/intel_timeline_sync_get/intel_timeline_sync_is_later/ (Tvrtko)
    v8: Prune the stale sync points when we idle.
    v9: Include a small benchmark in the kselftests
    v10: Separate the idr implementation into its own compartment. (Tvrkto)
    v11: Refactor igt_sync kselftests to avoid deep nesting (Tvrkto)
    v12: __sync_leaf_idx() to assert that p->height is 0 when checking leaves
    v13: kselftests to investigate struct i915_syncmap itself (Tvrtko)
    v14: Foray into ascii art graphs
    v15: Take into account that the random lookup/insert does 2 prng calls,
    not 1, when benchmarking, and use for_each_set_bit() (Tvrtko)
    v16: Improved ascii art
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/20170503093924.5320-4-chris@chris-wilson.co.uk
    47979480
i915_gem_timeline.h 3.67 KB