linux_dsm_epyc7002/drivers/gpu/drm/i915
Chris Wilson 14a0d527a4 drm/i915: Defer semaphore priority bumping to a workqueue
Since the semaphore fence may be signaled from inside an interrupt
handler from inside a request holding its request->lock, we cannot then
enter into the engine->active.lock for processing the semaphore priority
bump as we may traverse our call tree and end up on another held
request.

CPU 0:
[ 2243.218864]  _raw_spin_lock_irqsave+0x9a/0xb0
[ 2243.218867]  i915_schedule_bump_priority+0x49/0x80 [i915]
[ 2243.218869]  semaphore_notify+0x6d/0x98 [i915]
[ 2243.218871]  __i915_sw_fence_complete+0x61/0x420 [i915]
[ 2243.218874]  ? kmem_cache_free+0x211/0x290
[ 2243.218876]  i915_sw_fence_complete+0x58/0x80 [i915]
[ 2243.218879]  dma_i915_sw_fence_wake+0x3e/0x80 [i915]
[ 2243.218881]  signal_irq_work+0x571/0x690 [i915]
[ 2243.218883]  irq_work_run_list+0xd7/0x120
[ 2243.218885]  irq_work_run+0x1d/0x50
[ 2243.218887]  smp_irq_work_interrupt+0x21/0x30
[ 2243.218889]  irq_work_interrupt+0xf/0x20

CPU 1:
[ 2242.173107]  _raw_spin_lock+0x8f/0xa0
[ 2242.173110]  __i915_request_submit+0x64/0x4a0 [i915]
[ 2242.173112]  __execlists_submission_tasklet+0x8ee/0x2120 [i915]
[ 2242.173114]  ? i915_sched_lookup_priolist+0x1e3/0x2b0 [i915]
[ 2242.173117]  execlists_submit_request+0x2e8/0x2f0 [i915]
[ 2242.173119]  submit_notify+0x8f/0xc0 [i915]
[ 2242.173121]  __i915_sw_fence_complete+0x61/0x420 [i915]
[ 2242.173124]  ? _raw_spin_unlock_irqrestore+0x39/0x40
[ 2242.173137]  i915_sw_fence_complete+0x58/0x80 [i915]
[ 2242.173140]  i915_sw_fence_commit+0x16/0x20 [i915]

Closes: https://gitlab.freedesktop.org/drm/intel/issues/1318
Fixes: b7404c7ecb ("drm/i915: Bump ready tasks ahead of busywaits")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: <stable@vger.kernel.org> # v5.2+
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200310101720.9944-1-chris@chris-wilson.co.uk
(cherry picked from commit 209df10bb4)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
2020-03-11 23:12:39 +02:00
..
display drm/i915/tgl: Add Wa_22010178259:tgl 2020-03-02 10:48:56 +02:00
gem drm/i915: be more solid in checking the alignment 2020-03-11 23:12:39 +02:00
gt drm/i915/gt: Close race between cacheline_retire and free 2020-03-11 23:12:39 +02:00
gvt drm/i915/gvt: Fix dma-buf display blur issue on CFL 2020-03-11 23:12:39 +02:00
oa drm/i915: reimplement header test feature 2020-01-02 12:24:10 +02:00
selftests drm/i915: Add missing include file <linux/math64.h> 2020-01-13 13:43:50 +02:00
.gitignore drm/i915: reimplement header test feature 2020-01-02 12:24:10 +02: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/i915: Fix preallocated barrier list append 2020-02-12 13:24:45 +02:00
i915_active.h drm/i915/gt: Acquire ce->active before ce->pin_count/ce->pin_mutex 2020-02-12 13:24:45 +02:00
i915_buddy.c drn/i915: Break up long i915_buddy_free_list() with a cond_resched() 2019-12-30 12:10:38 +00:00
i915_buddy.h
i915_cmd_parser.c Correct function name in comment 2019-12-16 23:13:12 +00:00
i915_debugfs.c drm/i915: Pass intel_encoder to enc_to_*() 2020-01-13 20:10:51 +02:00
i915_debugfs.h
i915_drv.c drm/i915/psr: Force PSR probe only after full initialization 2020-03-02 10:46:25 +02:00
i915_drv.h drm/i915/psr: Force PSR probe only after full initialization 2020-03-02 10:46:25 +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: Early return for no-op i915_vma_pin_fence() 2020-01-09 08:53:15 +00:00
i915_gem_fence_reg.h
i915_gem_gtt.c ioremap changes for 5.6 2020-01-27 13:03:00 -08:00
i915_gem_gtt.h drm/i915/gtt: split up i915_gem_gtt 2020-01-07 19:27:36 +00:00
i915_gem.c drm/i915: Wean off drm_pci_alloc/drm_pci_free 2020-02-18 09:52:54 +02:00
i915_gem.h i915 features for v5.6: 2019-12-27 15:25:04 +10:00
i915_getparam.c drm/i915: Introduce DRM_I915_GEM_MMAP_OFFSET 2019-12-04 15:11:44 +00:00
i915_globals.c drm/i915: Ratelimit i915_globals_park 2019-12-18 17:38:56 +00:00
i915_globals.h
i915_gpu_error.c drm/i915: Update drm/i915 bug filing URL 2020-02-17 21:16:45 +02:00
i915_gpu_error.h drm/i915: Stub out i915_gpu_coredump_put 2020-02-12 13:24:34 +02:00
i915_ioc32.c
i915_irq.c drm/i915: prefer 3-letter acronym for ivybridge 2019-12-28 13:38:08 -08:00
i915_irq.h
i915_memcpy.c drm/i915: Align start for memcpy_from_wc 2019-12-11 22:40:41 +00:00
i915_memcpy.h drm/i915: Align start for memcpy_from_wc 2019-12-11 22:40:41 +00:00
i915_mm.c drm/i915/gem: Extend mmap support for lmem 2020-01-04 17:57:46 +00:00
i915_params.c
i915_params.h
i915_pci.c drm/i915/gtt: Downgrade gen7 (ivb, byt, hsw) back to aliasing-ppgtt 2020-02-26 14:04:28 +02:00
i915_perf_types.h drm/i915/perf: Reintroduce wait on OA configuration completion 2020-03-04 13:49:26 +02:00
i915_perf.c drm/i915/perf: Reintroduce wait on OA configuration completion 2020-03-04 13:49:26 +02:00
i915_perf.h drm/i915/perf: Register sysctl path globally 2019-12-13 20:16:23 +00:00
i915_pmu.c drm/i915/pmu: Avoid using globals for PMU events 2020-02-26 14:07:50 +02:00
i915_pmu.h drm/i915/pmu: Avoid using globals for PMU events 2020-02-26 14:07:50 +02:00
i915_priolist_types.h
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/tgl: Add Wa_22010178259:tgl 2020-03-02 10:48:56 +02:00
i915_request.c drm/i915: Defer semaphore priority bumping to a workqueue 2020-03-11 23:12:39 +02:00
i915_request.h drm/i915: Defer semaphore priority bumping to a workqueue 2020-03-11 23:12:39 +02:00
i915_scatterlist.c
i915_scatterlist.h
i915_scheduler_types.h
i915_scheduler.c drm/i915/gt: Protect defer_request() from new waiters 2020-02-17 21:24:19 +02: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
i915_suspend.c
i915_suspend.h
i915_sw_fence_work.c drm/i915: Unpin vma->obj on early error 2019-12-18 10:13:03 +00:00
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
i915_switcheroo.h
i915_syncmap.c
i915_syncmap.h
i915_sysfs.c drm/i915: Start chopping up the GPU error capture 2020-01-10 15:34:33 +00:00
i915_sysfs.h
i915_trace_points.c
i915_trace.h drm/i915: Rename pipe update tracepoints 2019-12-19 22:29:58 +02:00
i915_user_extensions.c
i915_user_extensions.h
i915_utils.c drm/i915: Update drm/i915 bug filing URL 2020-02-17 21:16:45 +02:00
i915_utils.h drm/i915: be more solid in checking the alignment 2020-03-11 23:12:39 +02:00
i915_vgpu.c
i915_vgpu.h
i915_vma_types.h drm/i915/gtt: split up i915_gem_gtt 2020-01-07 19:27:36 +00:00
i915_vma.c drm/i915: Check activity on i915_vma after confirming pin_count==0 2020-02-11 11:49:51 +02:00
i915_vma.h drm/i915/gtt: split up i915_gem_gtt 2020-01-07 19:27:36 +00:00
intel_csr.c
intel_csr.h
intel_device_info.c drm/i915/tgl: Assume future platforms will inherit TGL's SFC capability 2019-12-31 09:37:35 -08: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: lookup for mem_region of a mem_type 2020-01-05 01:08:09 +00:00
intel_memory_region.h drm/i915: lookup for mem_region of a mem_type 2020-01-05 01:08:09 +00:00
intel_pch.c drm/i915/pch: convert to using the drm_dbg_kms() macro. 2020-01-10 16:10:35 +02:00
intel_pch.h
intel_pm.c drm/i915/pm: use new struct drm_device logging macros. 2020-01-10 16:10:56 +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: use new struct drm_device based logging macros. 2020-01-10 16:11:04 +02:00
intel_region_lmem.h
intel_runtime_pm.c
intel_runtime_pm.h
intel_sideband.c drm/i915/sideband: convert to using new struct drm_device logging macros 2020-01-10 16:11:48 +02:00
intel_sideband.h
intel_uncore.c drm/i915/uncore: use new struct drm_device based macros. 2020-01-10 16:12:25 +02:00
intel_uncore.h
intel_wakeref.c drm/i915/gt: Flush ongoing retires during wait_for_idle 2020-01-03 00:33:07 +00:00
intel_wakeref.h drm/i915/gt: Flush ongoing retires during wait_for_idle 2020-01-03 00:33:07 +00:00
intel_wopcm.c
intel_wopcm.h
Kconfig drm/i915: Update drm/i915 bug filing URL 2020-02-17 21:16:45 +02: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
Makefile drm/i915: fix header test with GCOV 2020-02-26 14:04:28 +02:00