• Janusz Krzysztofik's avatar
    drm/i915: Fix negative value passed as remaining time · 6a534729
    Janusz Krzysztofik authored
    Commit b97060a9 ("drm/i915/guc: Update intel_gt_wait_for_idle to work
    with GuC") extended the API of intel_gt_retire_requests_timeout() with an
    extra argument 'remaining_timeout', intended for passing back unconsumed
    portion of requested timeout when 0 (success) is returned.  However, when
    request retirement happens to succeed despite an error returned by a call
    to dma_fence_wait_timeout(), that error code (a negative value) is passed
    back instead of remaining time.  If we then pass that negative value
    forward as requested timeout to intel_uc_wait_for_idle(), an explicit BUG
    will be triggered.
    
    If request retirement succeeds but an error code is passed back via
    remaininig_timeout, we may have no clue on how much of the initial timeout
    might have been left for spending it on waiting for GuC to become idle.
    OTOH, since all pending requests have been successfully retired, that
    error code has been already ignored by intel_gt_retire_requests_timeout(),
    then we shouldn't fail.
    
    Assume no more time has been left on error and pass 0 timeout value to
    intel_uc_wait_for_idle() to give it a chance to return success if GuC is
    already idle.
    
    v3: Don't fail on any error passed back via remaining_timeout.
    
    v2: Fix the issue on the caller side, not the provider.
    
    Fixes: b97060a9 ("drm/i915/guc: Update intel_gt_wait_for_idle to work with GuC")
    Signed-off-by: default avatarJanusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
    Cc: stable@vger.kernel.org # v5.15+
    Reviewed-by: default avatarAndrzej Hajda <andrzej.hajda@intel.com>
    Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20221121145655.75141-2-janusz.krzysztofik@linux.intel.com
    (cherry picked from commit f235dbd5)
    Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
    6a534729
intel_gt.c 28.4 KB