[PATCH v2 5/5] drm/i915/reset: Disable execlist per-engine reset for display reset tests

Ville Syrjala
2026-04-14T14:23:21Z

The display reset only happens from the full reset path. We must
therefore force execlist submission to always take the full reset
path and not the per-engine reset path. Currently the display
reset tests are in fact not testing display resets at all on
platforms using execlist submission. Ring submission and GuC
submission always take the full path anyway.

Also disable the engine reset inside __intel_gt_set_wedged() so
that we simulate the intel_gt_gpu_reset_clobbers_display() behavior
as closely as possible also when taking the full wedge path.

The slight race between the separate intel_display_reset_test()
calls in the overall reset path is harmless. kms_busy will keep
the modparam fixed during the test, and even if someone were to
fiddle with the modparam manually nothing bad should happen if
the calls return different values.

Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/gt/intel_reset.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_reset.c b/drivers/gpu/drm/i915/gt/intel_reset.c
index a1e6aaca8c9b..0b5f3fc58009 100644
--- a/drivers/gpu/drm/i915/gt/intel_reset.c
+++ b/drivers/gpu/drm/i915/gt/intel_reset.c
@@ -967,6 +967,7 @@ static void nop_submit_request(struct i915_request *request)

static void __intel_gt_set_wedged(struct intel_gt *gt)
{
+ struct intel_display *display = gt->i915->display;
struct intel_engine_cs *engine;
intel_engine_mask_t awake;
enum intel_engine_id id;
@@ -984,7 +985,8 @@ static void __intel_gt_set_wedged(struct intel_gt *gt)
awake = reset_prepare(gt);

/* Even if the GPU reset fails, it should still stop the engines */
- if (!intel_gt_gpu_reset_clobbers_display(gt))
+ if (!intel_gt_gpu_reset_clobbers_display(gt) &&
+ !intel_display_reset_test(display))
intel_gt_reset_all_engines(gt);

for_each_engine(engine, gt, id)
@@ -1506,9 +1508,10 @@ void intel_gt_handle_error(struct intel_gt *gt,

/*
* Try engine reset when available. We fall back to full reset if
- * single reset fails.
+ * single reset fails. Display reset test needs a full reset.
*/
- if (!intel_uc_uses_guc_submission(&gt->uc) &&
+ if (!intel_display_reset_test(gt->i915->display) &&
+ !intel_uc_uses_guc_submission(&gt->uc) &&
intel_has_reset_engine(gt) && !intel_gt_is_wedged(gt)) {
local_bh_disable();
for_each_engine_masked(engine, gt, engine_mask, tmp) {
--
2.52.0