1
0
Fork 0
alistair23-linux/drivers/gpu/drm/i915/gt
Chris Wilson d321f127eb drm/i915/gt: Delay execlist processing for tgl
commit 9b99e5ba3e upstream.

When running gem_exec_nop, it floods the system with many requests (with
the goal of userspace submitting faster than the HW can process a single
empty batch). This causes the driver to continually resubmit new
requests onto the end of an active context, a flood of lite-restore
preemptions. If we time this just right, Tigerlake hangs.

Inserting a small delay between the processing of CS events and
submitting the next context, prevents the hang. Naturally it does not
occur with debugging enabled. The suspicion then is that this is related
to the issues with the CS event buffer, and inserting an mmio read of
the CS pointer status appears to be very successful in preventing the
hang. Other registers, or uncached reads, or plain mb, do not prevent
the hang, suggesting that register is key -- but that the hang can be
prevented by a simple udelay, suggests it is just a timing issue like
that encountered by commit 233c1ae3c8 ("drm/i915/gt: Wait for CSB
entries on Tigerlake"). Also note that the hang is not prevented by
applying CTX_DESC_FORCE_RESTORE, or by inserting a delay on the GPU
between requests.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Cc: Bruce Chang <yu.bruce.chang@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: stable@vger.kernel.org
Acked-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201015195023.32346-1-chris@chris-wilson.co.uk
(cherry picked from commit 6ca7217dff)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-11-10 12:37:23 +01:00
..
selftests drm/i915: Markup expected timeline locks for i915_active 2019-08-16 18:02:07 +01:00
uc drm/i915/uc: Never fail on HuC firmware errors 2019-08-18 11:58:41 +01:00
Makefile drm/i915: use upstream version of header tests 2019-07-30 12:11:57 +03:00
gen6_renderstate.c
gen7_renderstate.c
gen8_renderstate.c
gen9_renderstate.c
intel_breadcrumbs.c Merge drm/drm-next into drm-intel-next-queued 2019-08-22 00:10:36 -07:00
intel_context.c drm/i915: Markup expected timeline locks for i915_active 2019-08-16 18:02:07 +01:00
intel_context.h drm/i915/gt: Mark context->active_count as protected by timeline->mutex 2019-08-16 18:02:06 +01:00
intel_context_types.h drm/i915/execlists: Lift process_csb() out of the irq-off spinlock 2019-08-16 20:59:02 +01:00
intel_engine.h drm/i915/execlists: Always force a context reload when rewinding RING_TAIL 2020-02-28 17:22:25 +01:00
intel_engine_cs.c drm/i915/gt: execlists->active is serialised by the tasklet 2019-10-09 14:39:31 -07:00
intel_engine_pm.c drm/i915: Hold irq-off for the entire fake lock period 2019-09-06 09:53:07 -07:00
intel_engine_pm.h drm/i915: Defer final intel_wakeref_put to process context 2019-08-08 21:28:51 +01:00
intel_engine_pool.c drm/i915: make pool objects read-only 2019-11-19 12:43:27 -08:00
intel_engine_pool.h drm/i915: Markup expected timeline locks for i915_active 2019-08-16 18:02:07 +01:00
intel_engine_pool_types.h drm/i915: Replace struct_mutex for batch pool serialisation 2019-08-04 14:31:18 +01:00
intel_engine_types.h drm/i915/execlists: Always force a context reload when rewinding RING_TAIL 2020-02-28 17:22:25 +01:00
intel_engine_user.c drm/i915: Fix up the inverse mapping for default ctx->engines[] 2019-08-08 15:45:35 +01:00
intel_engine_user.h drm/i915: Rename engines to match their user interface 2019-08-07 14:30:55 +01:00
intel_gpu_commands.h drm/i915/icl: Add command cache invalidate 2019-08-15 13:13:23 +01:00
intel_gt.c drm/i915: Protect request retirement with timeline->mutex 2019-08-15 23:21:13 +01:00
intel_gt.h drm/i915/gt: Move gt_cleanup_early out of gem_cleanup_early 2019-08-01 17:58:50 +01:00
intel_gt_irq.c drm/i915: Extract general GT interrupt handlers 2019-08-12 15:36:13 +01:00
intel_gt_irq.h drm/i915: Extract general GT interrupt handlers 2019-08-12 15:36:13 +01:00
intel_gt_pm.c drm/i915/gen8+: Add RC6 CTX corruption WA 2019-11-05 11:43:07 -08:00
intel_gt_pm.h drm/i915: Defer final intel_wakeref_put to process context 2019-08-08 21:28:51 +01:00
intel_gt_pm_irq.c drm/i915: Extract general GT interrupt handlers 2019-08-12 15:36:13 +01:00
intel_gt_pm_irq.h drm/i915: Extract GT powermanagement interrupt handling 2019-08-12 15:36:06 +01:00
intel_gt_types.h drm/i915: Move engine IDs out of i915_reg.h 2019-08-16 21:52:48 +01:00
intel_hangcheck.c
intel_lrc.c drm/i915/gt: Delay execlist processing for tgl 2020-11-10 12:37:23 +01:00
intel_lrc.h
intel_lrc_reg.h drm/i915/tgl: add Gen12 default indirect ctx offset 2019-08-20 14:23:45 +01:00
intel_mocs.c drm/i915/tgl: MOCS table update 2019-11-13 13:23:12 -08:00
intel_mocs.h drm/i915: Move MOCS setup to intel_mocs.c 2019-07-31 07:40:35 -07:00
intel_renderstate.c drm/i915: Serialize against vma moves 2019-08-19 15:25:56 +01:00
intel_renderstate.h
intel_reset.c drm/i915: Fixup preempt-to-busy vs reset of a virtual request 2019-10-09 14:39:30 -07:00
intel_reset.h drm/i915: Don't mix srcu tag and negative error codes 2019-10-07 10:44:48 -07:00
intel_reset_types.h
intel_ringbuffer.c drm/i915/execlists: Always force a context reload when rewinding RING_TAIL 2020-02-28 17:22:25 +01:00
intel_sseu.c drm/i915/perf: Refactor oa object to better manage resources 2019-08-07 20:34:39 +01:00
intel_sseu.h
intel_timeline.c drm/i915: Hold irq-off for the entire fake lock period 2019-09-06 09:53:07 -07:00
intel_timeline.h drm/i915/gt: Track timeline activeness in enter/exit 2019-08-15 23:16:05 +01:00
intel_timeline_types.h drm/i915/gt: Guard timeline pinning without relying on struct_mutex 2019-08-15 23:21:13 +01:00
intel_workarounds.c drm/i915: Whitelist COMMON_SLICE_CHICKEN2 2019-10-07 10:44:47 -07:00
intel_workarounds.h
intel_workarounds_types.h
mock_engine.c drm/i915: Protect request retirement with timeline->mutex 2019-08-15 23:21:13 +01:00
mock_engine.h
selftest_context.c drm/i915/selftests: Check the context size 2019-08-17 09:27:58 +01:00
selftest_engine.c drm/i915: Defer final intel_wakeref_put to process context 2019-08-08 21:28:51 +01:00
selftest_engine.h drm/i915: Defer final intel_wakeref_put to process context 2019-08-08 21:28:51 +01:00
selftest_engine_cs.c drm/i915: Rename engines to match their user interface 2019-08-07 14:30:55 +01:00
selftest_engine_pm.c drm/i915: Defer final intel_wakeref_put to process context 2019-08-08 21:28:51 +01:00
selftest_hangcheck.c drm/i915: Track ggtt fence reservations under its own mutex 2019-08-22 08:53:40 +01:00
selftest_lrc.c drm/i915: Serialize against vma moves 2019-08-19 15:25:56 +01:00
selftest_reset.c drm/i915: Only recover active engines 2019-08-01 13:22:00 +03:00
selftest_timeline.c drm/i915: Markup expected timeline locks for i915_active 2019-08-16 18:02:07 +01:00
selftest_workarounds.c drm/i915: Serialize against vma moves 2019-08-19 15:25:56 +01:00