[Intel-gfx] [PATCH v2 4/6] drm/i915/shrinker: Restrict vmap purge to objects with vmaps

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Mon Apr 11 14:25:41 UTC 2016


On 08/04/16 12:11, Chris Wilson wrote:
> When called because we have run out of vmap address space, we only need
> to recover objects that have vmappings and not all.
>
> v2: Start using is_vmalloc_addr()
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at linux.intel.com>
> ---
>   drivers/gpu/drm/i915/i915_drv.h          |  1 +
>   drivers/gpu/drm/i915/i915_gem_shrinker.c | 10 +++++++++-
>   2 files changed, 10 insertions(+), 1 deletion(-)

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Regards,

Tvrtko

>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index eda4218e2ede..4061a11e4234 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -3338,6 +3338,7 @@ unsigned long i915_gem_shrink(struct drm_i915_private *dev_priv,
>   #define I915_SHRINK_UNBOUND 0x2
>   #define I915_SHRINK_BOUND 0x4
>   #define I915_SHRINK_ACTIVE 0x8
> +#define I915_SHRINK_VMAPS 0x10
>   unsigned long i915_gem_shrink_all(struct drm_i915_private *dev_priv);
>   void i915_gem_shrinker_init(struct drm_i915_private *dev_priv);
>   void i915_gem_shrinker_cleanup(struct drm_i915_private *dev_priv);
> diff --git a/drivers/gpu/drm/i915/i915_gem_shrinker.c b/drivers/gpu/drm/i915/i915_gem_shrinker.c
> index 39943793edcc..d46388f25e04 100644
> --- a/drivers/gpu/drm/i915/i915_gem_shrinker.c
> +++ b/drivers/gpu/drm/i915/i915_gem_shrinker.c
> @@ -167,6 +167,10 @@ i915_gem_shrink(struct drm_i915_private *dev_priv,
>   			    obj->madv != I915_MADV_DONTNEED)
>   				continue;
>
> +			if (flags & I915_SHRINK_VMAPS &&
> +			    !is_vmalloc_addr(obj->mapping))
> +				continue;
> +
>   			if ((flags & I915_SHRINK_ACTIVE) == 0 && obj->active)
>   				continue;
>
> @@ -388,7 +392,11 @@ i915_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr
>   	if (!i915_gem_shrinker_lock_uninterruptible(dev_priv, &slu, 5000))
>   		return NOTIFY_DONE;
>
> -	freed_pages = i915_gem_shrink_all(dev_priv);
> +	freed_pages = i915_gem_shrink(dev_priv, -1UL,
> +				      I915_SHRINK_BOUND |
> +				      I915_SHRINK_UNBOUND |
> +				      I915_SHRINK_ACTIVE |
> +				      I915_SHRINK_VMAPS);
>
>   	i915_gem_shrinker_unlock_uninterruptible(dev_priv, &slu);
>
>


More information about the Intel-gfx mailing list