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: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170503093924.5320-4-chris@chris-wilson.co.uk
22 lines
1,004 B
C
22 lines
1,004 B
C
/* List each unit test as selftest(name, function)
|
|
*
|
|
* The name is used as both an enum and expanded as subtest__name to create
|
|
* a module parameter. It must be unique and legal for a C identifier.
|
|
*
|
|
* The function should be of type int function(void). It may be conditionally
|
|
* compiled using #if IS_ENABLED(DRM_I915_SELFTEST).
|
|
*
|
|
* Tests are executed in order by igt/drv_selftest
|
|
*/
|
|
selftest(sanitycheck, i915_mock_sanitycheck) /* keep first (igt selfcheck) */
|
|
selftest(scatterlist, scatterlist_mock_selftests)
|
|
selftest(syncmap, i915_syncmap_mock_selftests)
|
|
selftest(uncore, intel_uncore_mock_selftests)
|
|
selftest(breadcrumbs, intel_breadcrumbs_mock_selftests)
|
|
selftest(timelines, i915_gem_timeline_mock_selftests)
|
|
selftest(requests, i915_gem_request_mock_selftests)
|
|
selftest(objects, i915_gem_object_mock_selftests)
|
|
selftest(dmabuf, i915_gem_dmabuf_mock_selftests)
|
|
selftest(vma, i915_vma_mock_selftests)
|
|
selftest(evict, i915_gem_evict_mock_selftests)
|
|
selftest(gtt, i915_gem_gtt_mock_selftests)
|