linux/drivers/gpu/drm/i915
Chris Wilson c81471f5e9 drm/i915: Copy across scheduler behaviour flags across submit fences
We want the bonded request to have the same scheduler properties as its
master so that it is placed at the same depth in the queue. For example,
consider we have requests A, B and B', where B & B' are a bonded pair to
run in parallel on two engines.

	A -> B
     	     \- B'

B will run after A and so may be scheduled on an idle engine and wait on
A using a semaphore. B' sees B being executed and so enters the queue on
the same engine as A. As B' did not inherit the semaphore-chain from B,
it may have higher precedence than A and so preempts execution. However,
B' then sits on a semaphore waiting for B, who is waiting for A, who is
blocked by B.

Ergo B' needs to inherit the scheduler properties from B (i.e. the
semaphore chain) so that it is scheduled with the same priority as B and
will not be executed ahead of Bs dependencies.

Furthermore, to prevent the priorities changing via the expose fence on
B', we need to couple in the dependencies for PI. This requires us to
relax our sanity-checks that dependencies are strictly in order.

v2: Synchronise (B, B') execution on all platforms, regardless of using
a scheduler, any no-op syncs should be elided.

Fixes: ee1136908e ("drm/i915/execlists: Virtual engine bonding")
Closes: https://gitlab.freedesktop.org/drm/intel/issues/464
Testcase: igt/gem_exec_balancer/bonded-chain
Testcase: igt/gem_exec_balancer/bonded-semaphore
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191210151332.3902215-1-chris@chris-wilson.co.uk
2019-12-11 10:28:56 +00:00
..
display drm/i915/dsi: add support for DSC 2019-12-11 08:20:06 +02:00
gem Merge drm/drm-next into drm-intel-next-queued 2019-12-11 11:13:50 +02:00
gt Merge drm/drm-next into drm-intel-next-queued 2019-12-11 11:13:50 +02:00
gvt Merge drm/drm-next into drm-intel-next-queued 2019-12-11 11:13:50 +02:00
oa drm/i915/tgl: Add perf support on TGL 2019-10-29 12:53:54 +02:00
selftests drm/i915/guc: kill doorbell code and selftests 2019-12-09 13:55:44 -08:00
i915_active_types.h drm/i915: Serialise i915_active_fence_set() with itself 2019-11-27 17:02:14 +00:00
i915_active.c drm msm + fixes for 5.5-rc1 2019-12-06 10:28:09 -08:00
i915_active.h drm/i915: Specialise i915_active.work lock classes 2019-12-02 21:57:23 +00:00
i915_buddy.c
i915_buddy.h
i915_cmd_parser.c drm/i915: Remove vestigal i915_gem_context locals from cmdparser 2019-12-05 10:27:29 +00:00
i915_debugfs.c drm/i915/guc: kill the GuC client 2019-12-09 13:55:50 -08:00
i915_debugfs.h
i915_drv.c drm/i915: Flesh out device_info pretty printer 2019-12-09 09:58:51 +00:00
i915_drv.h drm/i915/fbc: Wait for vblank after FBC disable on glk+ 2019-12-09 16:10:58 +02:00
i915_fixed.h
i915_gem_evict.c drm/i915: Ignore most failures during evict-vm 2019-12-05 13:50:39 +00:00
i915_gem_fence_reg.c drm/i915: set num_fence_regs to 0 if there is no aperture 2019-10-29 10:35:47 +00:00
i915_gem_fence_reg.h drm/i915: Store i915_ggtt as the backpointer on fence registers 2019-10-16 19:41:36 +01:00
i915_gem_gtt.c drm/i915/gtt: Account for preallocation in asserts 2019-12-07 23:59:19 +00:00
i915_gem_gtt.h drm/i915/gen7: Re-enable full-ppgtt for ivb & hsw 2019-11-30 09:21:12 +00:00
i915_gem.c drm/i915/gem: Avoid rcu_barrier() from shrinker paths 2019-12-09 10:49:38 +00:00
i915_gem.h drm/i915/gem: Manually dump the debug trace on GEM_BUG_ON 2019-11-19 17:44:39 +00:00
i915_getparam.c drm/i915: Introduce DRM_I915_GEM_MMAP_OFFSET 2019-12-04 15:11:44 +00:00
i915_globals.c
i915_globals.h
i915_gpu_error.c drm/i915: Flesh out device_info pretty printer 2019-12-09 09:58:51 +00:00
i915_gpu_error.h drm/i915/tgl: Add gam instdone 2019-10-30 09:15:27 +00:00
i915_ioc32.c
i915_irq.c drm/i915/irq: Refactor gen11 display interrupt handling 2019-12-03 11:12:42 -08:00
i915_irq.h drm/i915: Extract the GuC interrupt handlers 2019-10-26 19:28:59 +01:00
i915_memcpy.c
i915_memcpy.h
i915_mm.c
i915_params.c drm/i915/lmem: add the fake lmem region 2019-10-31 20:41:47 +00:00
i915_params.h drm/i915/lmem: add the fake lmem region 2019-10-31 20:41:47 +00:00
i915_pci.c drm/i915/gt: Set the PD again for Haswell 2019-12-03 23:50:19 +00:00
i915_perf_types.h drm/i915/perf: Describe structure members in documentation 2019-10-24 15:01:35 +01:00
i915_perf.c drm/i915/perf: Configure OAR for specific context 2019-12-09 15:38:17 +02:00
i915_perf.h drm/i915/perf: introduce a versioning of the i915-perf uapi 2019-10-14 21:30:25 +01:00
i915_pmu.c drm/i915/pmu: Report frequency as zero while GPU is sleeping 2019-12-06 13:03:36 +00:00
i915_pmu.h drm/i915/pmu: Support multiple GPUs 2019-10-17 10:50:47 +01:00
i915_priolist_types.h drm/i915/gt: Replace hangcheck by heartbeats 2019-10-23 23:52:10 +01:00
i915_pvinfo.h
i915_query.c drm/i915/query: Align flavour of engine data lookup 2019-11-25 15:08:24 +02:00
i915_query.h
i915_reg.h drm/i915/dsb: Fix in mmio offset calculation of DSB instance 2019-12-11 12:13:47 +02:00
i915_request.c drm/i915: Copy across scheduler behaviour flags across submit fences 2019-12-11 10:28:56 +00:00
i915_request.h drm/i915: Mark up "sentinel" requests 2019-10-12 08:51:17 +01:00
i915_scatterlist.c
i915_scatterlist.h
i915_scheduler_types.h drm/i915: Note the addition of timeslicing to the pretend scheduler 2019-10-11 09:36:16 +01:00
i915_scheduler.c drm/i915: Copy across scheduler behaviour flags across submit fences 2019-12-11 10:28:56 +00:00
i915_scheduler.h drm/i915: Use a ctor for TYPESAFE_BY_RCU i915_request 2019-11-22 10:47:38 +00:00
i915_selftest.h drm/i915/selftests: Perform some basic cycle counting of MI ops 2019-11-11 18:30:13 +00:00
i915_suspend.c drm/i915: Drop struct_mutex from suspend state save/restore 2019-10-04 15:39:41 +01:00
i915_suspend.h
i915_sw_fence_work.c
i915_sw_fence_work.h
i915_sw_fence.c drm/i915: Propagate errors on awaiting already signaled dma-fences 2019-12-06 19:09:46 +00:00
i915_sw_fence.h drm/i915: Check for error before calling cmpxchg() 2019-12-06 19:09:33 +00:00
i915_switcheroo.c drm/i915: split out i915_switcheroo.[ch] from i915_drv.c 2019-10-06 11:25:00 +03:00
i915_switcheroo.h drm/i915: split out i915_switcheroo.[ch] from i915_drv.c 2019-10-06 11:25:00 +03:00
i915_syncmap.c
i915_syncmap.h
i915_sysfs.c drm/i915: Extract GT render power state management 2019-10-26 19:28:59 +01:00
i915_sysfs.h
i915_trace_points.c
i915_trace.h drm/i915: Move context management under GEM 2019-10-04 15:39:34 +01:00
i915_user_extensions.c
i915_user_extensions.h
i915_utils.c drm/i915: Rename "inject_load_failure" module parameter 2019-10-29 15:37:57 +00:00
i915_utils.h drm/i915: Fix i915_inject_load_error() name to read *_probe_* 2019-10-29 15:37:57 +00:00
i915_vgpu.c
i915_vgpu.h
i915_vma.c drm/i915: Change i915_vma_unbind() to report -EAGAIN on activity 2019-12-09 11:49:57 +00:00
i915_vma.h drm/i915: Try hard to bind the context 2019-12-05 13:50:54 +00:00
intel_csr.c drm/i915/dmc: Update ICL DMC version to v1.09 2019-09-27 10:20:39 -07:00
intel_csr.h
intel_device_info.c drm/i915: Flesh out device_info pretty printer 2019-12-09 09:58:51 +00:00
intel_device_info.h drm/i915: Flesh out device_info pretty printer 2019-12-09 09:58:51 +00:00
intel_gvt.c
intel_gvt.h
intel_memory_region.c drm/i915/lmem: add the fake lmem region 2019-10-31 20:41:47 +00:00
intel_memory_region.h drm/i915/lmem: add the fake lmem region 2019-10-31 20:41:47 +00:00
intel_pch.c drm/i915: Fix detection for a CMP-V PCH 2019-11-18 16:36:03 +02:00
intel_pch.h drm/i915: Fix detection for a CMP-V PCH 2019-11-18 16:36:03 +02:00
intel_pm.c drm/i915: Relocate intel_crtc_active() 2019-12-09 16:10:58 +02:00
intel_pm.h drm/i915: Pass dev_priv to ilk_disable_lp_wm() 2019-12-04 15:37:30 +02:00
intel_region_lmem.c drm/i915/lmem: fixup fake lmem teardown 2019-11-06 14:34:10 +00:00
intel_region_lmem.h drm/i915/lmem: add the fake lmem region 2019-10-31 20:41:47 +00:00
intel_runtime_pm.c drm/i915/display: abstract all vgaarb access to intel_vga.[ch] 2019-10-02 13:31:54 +03:00
intel_runtime_pm.h
intel_sideband.c
intel_sideband.h
intel_uncore.c
intel_uncore.h
intel_wakeref.c drm/i915: Mark up the calling context for intel_wakeref_put() 2019-11-25 15:29:17 +02:00
intel_wakeref.h drm/i915: Mark up the calling context for intel_wakeref_put() 2019-11-25 15:29:17 +02:00
intel_wopcm.c
intel_wopcm.h
Kconfig drm/i915: Put future HW and their uAPIs under STAGING & BROKEN 2019-10-27 15:47:10 +00:00
Kconfig.debug Merge drm/drm-next into drm-intel-next-queued 2019-12-11 11:13:50 +02:00
Kconfig.profile drm/i915: Default to a more lenient forced preemption timeout 2019-11-27 10:12:14 +02:00
Kconfig.unstable drm/i915/lmem: add the fake lmem region 2019-10-31 20:41:47 +00:00
Makefile drm/i915/selftests: Wrap vm_mmap() around GEM objects 2019-11-07 21:22:58 +00:00