diff mbox series

[v3,6/8] drm/i915/reset: decide whether display reset is needed on gt side

Message ID c32a88f292f516ec702bd07001ac609b8acc2888.1741001054.git.jani.nikula@intel.com (mailing list archive)
State New
Headers show
Series drm/i915: display reset cleanups | expand

Commit Message

Jani Nikula March 3, 2025, 11:27 a.m. UTC
Move the checks for whether display reset is needed at all to gt side of
things. This way, we can decide to skip the display calls altogether if
display reset is not required.

Cc: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display_reset.c |  5 -----
 drivers/gpu/drm/i915/gt/intel_reset.c              | 10 +++++++++-
 2 files changed, 9 insertions(+), 6 deletions(-)

Comments

Matt Roper March 3, 2025, 11:15 p.m. UTC | #1
On Mon, Mar 03, 2025 at 01:27:08PM +0200, Jani Nikula wrote:
> Move the checks for whether display reset is needed at all to gt side of
> things. This way, we can decide to skip the display calls altogether if
> display reset is not required.
> 
> Cc: Matt Roper <matthew.d.roper@intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_display_reset.c |  5 -----
>  drivers/gpu/drm/i915/gt/intel_reset.c              | 10 +++++++++-
>  2 files changed, 9 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_reset.c b/drivers/gpu/drm/i915/display/intel_display_reset.c
> index acc728c75328..c48d822db58e 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_reset.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_reset.c
> @@ -38,11 +38,6 @@ bool intel_display_reset_prepare(struct intel_display *display)
>  	if (!HAS_DISPLAY(display))
>  		return false;
>  
> -	/* reset doesn't touch the display */
> -	if (!intel_display_reset_test(display) &&
> -	    !gpu_reset_clobbers_display(display))
> -		return false;
> -
>  	if (atomic_read(&display->restore.pending_fb_pin)) {
>  		drm_dbg_kms(display->drm,
>  			    "Modeset potentially stuck, unbreaking through wedging\n");
> diff --git a/drivers/gpu/drm/i915/gt/intel_reset.c b/drivers/gpu/drm/i915/gt/intel_reset.c
> index f6c8e4d48b04..d4f2829477b4 100644
> --- a/drivers/gpu/drm/i915/gt/intel_reset.c
> +++ b/drivers/gpu/drm/i915/gt/intel_reset.c
> @@ -1419,9 +1419,17 @@ static void intel_gt_reset_global(struct intel_gt *gt,
>  	intel_wedge_on_timeout(&w, gt, 60 * HZ) {
>  		struct drm_i915_private *i915 = gt->i915;
>  		struct intel_display *display = &i915->display;
> +		bool need_display_reset;
>  		bool reset_display;
>  
> -		reset_display = intel_display_reset_prepare(display);
> +		need_display_reset = intel_gt_gpu_reset_clobbers_display(gt) &&
> +			intel_has_gpu_reset(gt);
> +
> +		reset_display = intel_display_reset_test(display) ||
> +			need_display_reset;
> +
> +		if (reset_display)
> +			reset_display = intel_display_reset_prepare(display);
>  
>  		intel_gt_reset(gt, engine_mask, reason);
>  
> -- 
> 2.39.5
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_display_reset.c b/drivers/gpu/drm/i915/display/intel_display_reset.c
index acc728c75328..c48d822db58e 100644
--- a/drivers/gpu/drm/i915/display/intel_display_reset.c
+++ b/drivers/gpu/drm/i915/display/intel_display_reset.c
@@ -38,11 +38,6 @@  bool intel_display_reset_prepare(struct intel_display *display)
 	if (!HAS_DISPLAY(display))
 		return false;
 
-	/* reset doesn't touch the display */
-	if (!intel_display_reset_test(display) &&
-	    !gpu_reset_clobbers_display(display))
-		return false;
-
 	if (atomic_read(&display->restore.pending_fb_pin)) {
 		drm_dbg_kms(display->drm,
 			    "Modeset potentially stuck, unbreaking through wedging\n");
diff --git a/drivers/gpu/drm/i915/gt/intel_reset.c b/drivers/gpu/drm/i915/gt/intel_reset.c
index f6c8e4d48b04..d4f2829477b4 100644
--- a/drivers/gpu/drm/i915/gt/intel_reset.c
+++ b/drivers/gpu/drm/i915/gt/intel_reset.c
@@ -1419,9 +1419,17 @@  static void intel_gt_reset_global(struct intel_gt *gt,
 	intel_wedge_on_timeout(&w, gt, 60 * HZ) {
 		struct drm_i915_private *i915 = gt->i915;
 		struct intel_display *display = &i915->display;
+		bool need_display_reset;
 		bool reset_display;
 
-		reset_display = intel_display_reset_prepare(display);
+		need_display_reset = intel_gt_gpu_reset_clobbers_display(gt) &&
+			intel_has_gpu_reset(gt);
+
+		reset_display = intel_display_reset_test(display) ||
+			need_display_reset;
+
+		if (reset_display)
+			reset_display = intel_display_reset_prepare(display);
 
 		intel_gt_reset(gt, engine_mask, reason);