linux/drivers/gpu/drm/i915/gt
Sebastian Brzezinka 4cfe4c0efb drm/i915: skip __i915_request_skip() for already signaled requests
After a GPU reset the HWSP is zeroed, so previously completed
requests appear incomplete. If such a request is picked up during
reset_rewind() and marked guilty, i915_request_set_error_once()
returns early (fence already signaled), leaving fence.error without
a fatal error code. The subsequent __i915_request_skip() then hits:
```
GEM_BUG_ON(!fatal_error(rq->fence.error))
```

Fixes a kernel BUG observed on Sandy Bridge (Gen6) during
heartbeat-triggered engine resets.
```
kernel BUG at drivers/gpu/drm/i915/i915_request.c:556!
RIP: __i915_request_skip+0x15e/0x1d0 [i915]
...
__i915_request_reset+0x212/0xa70 [i915]
reset_rewind+0xe4/0x280 [i915]
intel_gt_reset+0x30d/0x5b0 [i915]
heartbeat+0x516/0x530 [i915]
```

Guard __i915_request_skip() with i915_request_signaled(), if the
fence is already signaled, the ring content is committed and there
is nothing left to skip.

Fixes: 36e191f064 ("drm/i915: Apply i915_request_skip() on submission")
Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/13729
Signed-off-by: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
Cc: stable@vger.kernel.org # v5.7+
Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com>
Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
Link: https://lore.kernel.org/r/fe76921d35b6ae85aa651822726d0d9815aa5362.1776339012.git.sebastian.brzezinka@intel.com
(cherry picked from commit 5ba54393dcd7adf75a9f39f5a933b1538349cad5)
Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
2026-05-12 08:05:21 +01:00
..
selftests
shaders drm/i915/gt: fix typos in i915/gt files. 2025-01-23 05:48:22 -05:00
uc Merge tag 'drm-intel-next-2026-03-16' of https://gitlab.freedesktop.org/drm/i915/kernel into drm-next 2026-03-17 15:44:26 +10:00
gen2_engine_cs.c drm/i915/irq: rename irq_mask to gen2_imr_mask 2025-09-19 10:07:12 +03:00
gen2_engine_cs.h drm/i915/gt: s/gen3/gen2/ 2024-10-15 17:49:24 +03:00
gen6_engine_cs.c
gen6_engine_cs.h
gen6_ppgtt.c drm/{i915, xe}/reg: rename masked field helpers REG_MASKED_FIELD*() 2026-03-04 13:04:24 +02:00
gen6_ppgtt.h
gen6_renderstate.c
gen7_renderclear.c drm/i915: remove all IS_<PLATFORM>_GT<N>() macros 2024-10-24 13:14:37 +03:00
gen7_renderclear.h
gen7_renderstate.c
gen8_engine_cs.c drm: include drm_print.h where needed 2025-10-31 10:34:52 +02:00
gen8_engine_cs.h
gen8_ppgtt.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
gen8_ppgtt.h
gen8_renderstate.c
gen9_renderstate.c
hsw_clear_kernel.c
intel_breadcrumbs_types.h
intel_breadcrumbs.c dma-buf: abstract fence locking v2 2026-02-23 16:14:19 +01:00
intel_breadcrumbs.h
intel_context_param.h
intel_context_sseu.c
intel_context_types.h drm/i915: split out i915_ptr_util.h 2025-09-12 11:08:45 +03:00
intel_context.c
intel_context.h
intel_engine_cs.c drm/i915/gt: Check set_default_submission() before deferencing 2026-03-18 11:53:20 +02:00
intel_engine_heartbeat.c drm/i915/gt: fix refcount underflow in intel_engine_park_heartbeat 2026-04-08 14:31:16 +03:00
intel_engine_heartbeat.h
intel_engine_pm.c drm/{i915, xe}/reg: rename masked field helpers REG_MASKED_FIELD*() 2026-03-04 13:04:24 +02:00
intel_engine_pm.h
intel_engine_regs.h drm/i915/pmu: Add support for gen2 2024-10-15 17:51:00 +03:00
intel_engine_stats.h
intel_engine_types.h drm/i915/gt: fix typos in i915/gt files. 2025-01-23 05:48:22 -05:00
intel_engine_user.c drm: include drm_print.h where needed 2025-10-31 10:34:52 +02:00
intel_engine_user.h
intel_engine.h drm/i915: Move out engine related macros from i915_drv.h 2025-06-27 08:14:58 +02:00
intel_execlists_submission.c drm/{i915, xe}/reg: rename masked field helpers REG_MASKED_FIELD*() 2026-03-04 13:04:24 +02:00
intel_execlists_submission.h
intel_ggtt_fencing.c drm/{i915, xe}/reg: rename masked field helpers REG_MASKED_FIELD*() 2026-03-04 13:04:24 +02:00
intel_ggtt_fencing.h
intel_ggtt_gmch.c drm: include drm_print.h where needed 2025-10-31 10:34:52 +02:00
intel_ggtt_gmch.h
intel_ggtt.c drm: include drm_print.h where needed 2025-10-31 10:34:52 +02:00
intel_gpu_commands.h
intel_gsc.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
intel_gsc.h
intel_gt_buffer_pool_types.h
intel_gt_buffer_pool.c treewide: Replace kmalloc with kmalloc_obj for non-scalar types 2026-02-21 01:02:28 -08:00
intel_gt_buffer_pool.h
intel_gt_ccs_mode.c
intel_gt_ccs_mode.h
intel_gt_clock_utils.c drm/i915: split out i915_freq.[ch] 2025-11-21 12:11:49 +02:00
intel_gt_clock_utils.h
intel_gt_debugfs.c Merge tag 'drm-intel-gt-next-2026-01-16' of https://gitlab.freedesktop.org/drm/i915/kernel into drm-next 2026-01-19 13:51:10 +10:00
intel_gt_debugfs.h
intel_gt_defines.h
intel_gt_engines_debugfs.c drm/i915/gt: use designated initializers for intel_gt_debugfs_file 2026-01-01 13:14:50 +01:00
intel_gt_engines_debugfs.h
intel_gt_irq.c drm/i915: Remove i915_reg.h from intel_display_irq.c 2026-02-12 16:13:14 +05:30
intel_gt_irq.h
intel_gt_mcr.c drm/i915: split out i915_wait_util.h 2025-09-12 11:08:45 +03:00
intel_gt_mcr.h
intel_gt_pm_debugfs.c Merge drm/drm-next into drm-intel-next 2026-02-25 13:23:04 +02:00
intel_gt_pm_debugfs.h
intel_gt_pm_irq.c
intel_gt_pm_irq.h
intel_gt_pm.c drm/i915: stop including display/intel_display_{core, limits}.h from i915_drv.h 2025-05-27 11:25:53 +03:00
intel_gt_pm.h drm/i915: use NULL for zero wakeref_t instead of plain integer 0 2024-10-04 10:29:24 +03:00
intel_gt_print.h drm/i915: switch to use kernel standard error injection 2025-12-18 11:59:20 +02:00
intel_gt_regs.h drm/i915/gt: prefer _PICK_EVEN() over _PICK() 2026-03-04 13:04:31 +02:00
intel_gt_requests.c drm/i915: Protect access to driver and timeline name 2025-06-13 08:26:36 +01:00
intel_gt_requests.h
intel_gt_sysfs_pm.c drm/{i915, xe}: Extract pcode definitions to common header 2026-02-12 15:30:40 +05:30
intel_gt_sysfs_pm.h
intel_gt_sysfs.c
intel_gt_sysfs.h
intel_gt_types.h
intel_gt.c drm/i915: Remove i915_reg.h from intel_overlay.c 2026-02-12 15:30:48 +05:30
intel_gt.h
intel_gtt.c drm/i915/gt: Remove trailing blank lines 2025-03-19 02:40:49 +01:00
intel_gtt.h folio_batch: rename pagevec.h to folio_batch.h 2026-04-05 13:53:07 -07:00
intel_hwconfig.h
intel_llc_types.h
intel_llc.c drm/{i915, xe}: Extract pcode definitions to common header 2026-02-12 15:30:40 +05:30
intel_llc.h
intel_lrc_reg.h
intel_lrc.c drm/{i915, xe}/reg: rename masked field helpers REG_MASKED_FIELD*() 2026-03-04 13:04:24 +02:00
intel_lrc.h
intel_migrate_types.h
intel_migrate.c drm/i915/gt: fix typos in i915/gt files. 2025-01-23 05:48:22 -05:00
intel_migrate.h
intel_mocs.c drm: include drm_print.h where needed 2025-10-31 10:34:52 +02:00
intel_mocs.h
intel_ppgtt.c treewide: Replace kmalloc with kmalloc_obj for non-scalar types 2026-02-21 01:02:28 -08:00
intel_rc6_types.h
intel_rc6.c drm/{i915, xe}/reg: rename masked field helpers REG_MASKED_FIELD*() 2026-03-04 13:04:24 +02:00
intel_rc6.h
intel_region_lmem.c pci-v6.19-changes 2025-12-04 17:29:41 -08:00
intel_region_lmem.h
intel_renderstate.c drm: include drm_print.h where needed 2025-10-31 10:34:52 +02:00
intel_renderstate.h
intel_reset_types.h drm/i915/gem: Clean-up outdated struct_mutex comments 2025-09-09 10:36:27 -04:00
intel_reset.c drm/i915: skip __i915_request_skip() for already signaled requests 2026-05-12 08:05:21 +01:00
intel_reset.h drm/i915/reset: add intel_gt_gpu_reset_clobbers_display() helper 2025-03-05 12:48:22 +02:00
intel_ring_submission.c drm/{i915, xe}/reg: rename masked field helpers REG_MASKED_FIELD*() 2026-03-04 13:04:24 +02:00
intel_ring_types.h
intel_ring.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
intel_ring.h drm/i915: Remove unused intel_ring_cacheline_align 2024-12-30 01:31:56 +01:00
intel_rps_types.h drm/i915/rps: fix stale reference to i915->irq_lock 2025-05-07 15:44:19 +03:00
intel_rps.c drm/{i915, xe}: Extract pcode definitions to common header 2026-02-12 15:30:40 +05:30
intel_rps.h drm/i915/rps: call RPS functions via the parent interface 2025-11-19 19:33:43 +02:00
intel_sa_media.c drm: include drm_print.h where needed 2025-10-31 10:34:52 +02:00
intel_sa_media.h
intel_sseu_debugfs.c Merge tag 'drm-intel-gt-next-2026-01-16' of https://gitlab.freedesktop.org/drm/i915/kernel into drm-next 2026-01-19 13:51:10 +10:00
intel_sseu_debugfs.h
intel_sseu.c drm: include drm_print.h where needed 2025-10-31 10:34:52 +02:00
intel_sseu.h
intel_timeline_types.h
intel_timeline.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
intel_timeline.h drm/i915: split out i915_list_util.h 2025-09-12 11:08:45 +03:00
intel_tlb.c drm/i915/gt: add a macro for mock gt wakeref special value and use it 2024-09-30 17:54:11 +03:00
intel_tlb.h drm/i915/gt: Use standard API for seqcount read in TLB invalidation 2025-10-31 10:58:05 +01:00
intel_wopcm.c drm/i915: switch to use kernel standard error injection 2025-12-18 11:59:20 +02:00
intel_wopcm.h drm/i915/gt: Fix SPDX license format 2025-03-19 02:40:19 +01:00
intel_workarounds_types.h
intel_workarounds.c drm/{i915, xe}/reg: rename masked field helpers REG_MASKED_FIELD*() 2026-03-04 13:04:24 +02:00
intel_workarounds.h
ivb_clear_kernel.c
mock_engine.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
mock_engine.h
selftest_context.c drm: include drm_print.h where needed 2025-10-31 10:34:52 +02:00
selftest_engine_cs.c
selftest_engine_heartbeat.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
selftest_engine_heartbeat.h
selftest_engine_pm.c
selftest_engine.c
selftest_engine.h
selftest_execlists.c Convert more 'alloc_obj' cases to default GFP_KERNEL arguments 2026-02-21 20:03:00 -08:00
selftest_gt_pm.c
selftest_hangcheck.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
selftest_llc.c
selftest_llc.h
selftest_lrc.c Merge tag 'drm-intel-gt-next-2025-05-08-1' of https://gitlab.freedesktop.org/drm/i915/kernel into drm-next 2025-05-09 11:39:27 +10:00
selftest_migrate.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
selftest_mocs.c
selftest_rc6.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
selftest_rc6.h
selftest_reset.c
selftest_ring_submission.c kernel.h: drop STACK_MAGIC macro 2026-01-31 16:16:04 -08:00
selftest_ring.c
selftest_rps.c drm/i915/selftest: Add throttle reason diagnostics to RPS selftests 2026-01-07 09:07:06 -08:00
selftest_rps.h
selftest_slpc.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
selftest_timeline.c Convert more 'alloc_obj' cases to default GFP_KERNEL arguments 2026-02-21 20:03:00 -08:00
selftest_tlb.c drm/i915: split out i915_wait_util.h 2025-09-12 11:08:45 +03:00
selftest_workarounds.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
shmem_utils.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
shmem_utils.h
st_shmem_utils.c
sysfs_engines.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
sysfs_engines.h