For whole series:

Acked-by: Maarten Lankhorst <[email protected]>

On 8/27/26 14:34, Jani Nikula wrote:
> As written by Maarten: Not waiting on fences until they're signaled is
> an existing issue in i915, and was added as a workaround for a deadlock
> when GPU reset has to reset display as well on old platforms. This
> requires a modeset to disable everything, which may hang since it could
> wait on a fence that may only be signaled after GPU reset completes.
>
> Limit the timeout on fence waits a) to platforms where GPU reset
> clobbers display, and b) when we're running forced display reset tests.
>
> This change only impacts i915, as xe has MAX_SCHEDULE_TIMEOUT in any
> case.
>
> Cc: Ville Syrjälä <[email protected]>
> Suggested-by: Maarten Lankhorst <[email protected]>
> Signed-off-by: Jani Nikula <[email protected]>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
> b/drivers/gpu/drm/i915/display/intel_display.c
> index aa5d41dac8a9..76ec9161aaa3 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -74,6 +74,7 @@
>  #include "intel_display_driver.h"
>  #include "intel_display_power.h"
>  #include "intel_display_regs.h"
> +#include "intel_display_reset.h"
>  #include "intel_display_rpm.h"
>  #include "intel_display_types.h"
>  #include "intel_display_utils.h"
> @@ -7277,15 +7278,20 @@ static void intel_atomic_commit_fence_wait(struct 
> intel_atomic_state *state)
>       struct intel_display *display = to_intel_display(state);
>       struct drm_plane *plane;
>       struct drm_plane_state *new_plane_state;
> -     long ret;
> +     long timeout, ret;
>       int i;
>  
> +     if (intel_display_reset_needed_after_gpu_reset(display) ||
> +         intel_display_reset_test(display))
> +             timeout = i915_fence_timeout();
> +     else
> +             timeout = MAX_SCHEDULE_TIMEOUT;
> +
>       for_each_new_plane_in_state(&state->base, plane, new_plane_state, i) {
>               if (!new_plane_state->fence)
>                       continue;
>  
> -             ret = dma_fence_wait_timeout(new_plane_state->fence, false,
> -                                          i915_fence_timeout());
> +             ret = dma_fence_wait_timeout(new_plane_state->fence, false, 
> timeout);
>               if (!ret)
>                       ret = -ETIMEDOUT;
>               if (ret < 0) {

Reply via email to