drm/i915: Only attempt to scan the requested number of shrinker slabs
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 15 Jan 2018 21:24:46 +0000 (21:24 +0000)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Thu, 1 Feb 2018 15:32:41 +0000 (07:32 -0800)
Since commit 4e773c3a8a69 ("drm/i915: Wire up shrinkctl->nr_scanned"),
we track the number of objects we scan and do not wish to exceed that as
it will overly penalise our own slabs under mempressure. Given that we
now know the target number of objects to scan, use that as our guide for
deciding to shrink as opposed to the number of objects we manage to
shrink (which doesn't correspond to the numbers we report to shrinkctl).

Fixes: 4e773c3a8a69 ("drm/i915: Wire up shrinkctl->nr_scanned")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180115212455.24046-2-chris@chris-wilson.co.uk
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
(cherry picked from commit 29d384e34c55d696cf37bd4159e05f4b14d45da0)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/i915/i915_gem_shrinker.c

index 9029ed04879c30cb50882f6879a989936cc7e6c9..0e158f9287c46e3d54395b379f89bfab36b17a84 100644 (file)
@@ -363,13 +363,13 @@ i915_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
                                I915_SHRINK_BOUND |
                                I915_SHRINK_UNBOUND |
                                I915_SHRINK_PURGEABLE);
-       if (freed < sc->nr_to_scan)
+       if (sc->nr_scanned < sc->nr_to_scan)
                freed += i915_gem_shrink(i915,
                                         sc->nr_to_scan - sc->nr_scanned,
                                         &sc->nr_scanned,
                                         I915_SHRINK_BOUND |
                                         I915_SHRINK_UNBOUND);
-       if (freed < sc->nr_to_scan && current_is_kswapd()) {
+       if (sc->nr_scanned < sc->nr_to_scan && current_is_kswapd()) {
                intel_runtime_pm_get(i915);
                freed += i915_gem_shrink(i915,
                                         sc->nr_to_scan - sc->nr_scanned,