[Intel-gfx] [PATCH 2/2] drm/i915: Fix timeout handling in i915_gem_shrinker_vmap

Chris Wilson chris at chris-wilson.co.uk
Wed Jan 9 14:31:03 UTC 2019


Quoting Tvrtko Ursulin (2019-01-09 14:12:47)
> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> 
> The code tries to grab struct mutex for 5ms every time the unlocked GPU
> idle wait succeeds. But the GPU idle wait itself is practically unbound
> which means the 5ms timeout might not be honoured.
> 
> Cap the GPU idle wait to 5ms as well to fix this.
> 
> v2:
>  * Rebase.
> 
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> ---
>  drivers/gpu/drm/i915/i915_gem_shrinker.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem_shrinker.c b/drivers/gpu/drm/i915/i915_gem_shrinker.c
> index ce539d38461c..4ee393028a93 100644
> --- a/drivers/gpu/drm/i915/i915_gem_shrinker.c
> +++ b/drivers/gpu/drm/i915/i915_gem_shrinker.c
> @@ -402,13 +402,12 @@ i915_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
>  
>  static bool
>  shrinker_lock_uninterruptible(struct drm_i915_private *i915, bool *unlock,
> -                             int timeout_ms)
> +                             unsigned long timeout)
>  {
> -       unsigned long timeout = jiffies + msecs_to_jiffies_timeout(timeout_ms);
> +       const unsigned long timeout_end = jiffies + timeout;
>  
>         do {
> -               if (i915_gem_wait_for_idle(i915,
> -                                          0, MAX_SCHEDULE_TIMEOUT) == 0 &&
> +               if (i915_gem_wait_for_idle(i915, 0, timeout) == 0 &&

Hmm, I wonder if this code could be hitting i915_request_wait():

#if IS_ENABLED(CONFIG_LOCKDEP)
        GEM_BUG_ON(debug_locks &&
                   !!lockdep_is_held(&rq->i915->drm.struct_mutex) !=
                   !!(flags & I915_WAIT_LOCKED));
#endif

as i915_gem_shrinker_vmap() could conceivably be called under
struct_mutex, e.g. i915_gem_object_pin_map(), and I'm sure I've seen the
vmap arena used for setting pte bits.

Onwards to removing that restriction!
-Chris


More information about the Intel-gfx mailing list