drm/gem: Add LRU/shrinker helper
authorRob Clark <robdclark@chromium.org>
Tue, 2 Aug 2022 15:51:42 +0000 (08:51 -0700)
committerRob Clark <robdclark@chromium.org>
Sat, 27 Aug 2022 16:32:45 +0000 (09:32 -0700)
commite7c2af13f811d0c23340154b7b2795876c71e4be
tree85b5ab9a44e2a89d5169682b893879c23a267944
parentda53d8b54647482125e29ef80dd9acbb64f2d67f
drm/gem: Add LRU/shrinker helper

Add a simple LRU helper to assist with driver's shrinker implementation.
It handles tracking the number of backing pages associated with a given
LRU, and provides a helper to implement shrinker_scan.

A driver can use multiple LRU instances to track objects in various
states, for example a dontneed LRU for purgeable objects, a willneed LRU
for evictable objects, and an unpinned LRU for objects without backing
pages.

All LRUs that the object can be moved between must share a single lock.

v2: lockdep_assert_held() instead of WARN_ON(!mutex_is_locked())
v3: make drm_gem_lru_move_tail_locked() static until there is a user

Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Patchwork: https://patchwork.freedesktop.org/patch/496128/
Link: https://lore.kernel.org/r/20220802155152.1727594-10-robdclark@gmail.com
drivers/gpu/drm/drm_gem.c
include/drm/drm_gem.h