[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