[PATCH 00/15] drm+msm: Shrinker and LRU rework

From: Rob Clark
Date: Sat Jun 25 2022 - 18:55:00 EST


From: Rob Clark <robdclark@xxxxxxxxxxxx>

This is mostly motivated by getting drm/msm to pass an i-g-t shrinker
test that I've been working on. In particular the test creates and
cycles between more GEM buffers than what will fit in RAM to force
eviction and re-pin. (There are sub-tests that cover this case both
single threaded and with many child processes in parallel.)

Getting this test to pass necessitated a few improvements:

1. Re-ordering submit path to get rid of __GFP_NORETRY (in the common
case, doing this for syncobjs is still TODO)
2. Decoupling locks needed in the retire path from locks that could
be held while hitting reclaim in the submit path
3. If necessary, allow stalling on active BOs for reclaim.

The latter point is because we pin objects in the synchronous part of
the submit path (before queuing on the drm gpu-scheduler), which means
in the parallel variant of the i-g-t test, we need to be able to block
in the reclaim path until some queued work has completed/retired.

In the process of re-working how drm/msm tracks buffer state in it's
various LRU lists, I refactored out a drm_gem_lru helper which, in
theory, should be usable by other drivers and drm shmem helpers for
implementing LRU tracking and shrinker.

Rob Clark (15):
drm/msm: Switch to pfn mappings
drm/msm: Make enable_eviction flag static
drm/msm: Reorder lock vs submit alloc
drm/msm: Small submit cleanup
drm/msm: Split out idr_lock
drm/msm/gem: Check for active in shrinker path
drm/msm/gem: Rename update_inactive
drm/msm/gem: Rename to pin/unpin_pages
drm/msm/gem: Consolidate pin/unpin paths
drm/msm/gem: Remove active refcnt
drm/gem: Add LRU/shrinker helper
drm/msm/gem: Convert to using drm_gem_lru
drm/msm/gem: Unpin buffers earlier
drm/msm/gem: Consolidate shrinker trace
drm/msm/gem: Evict active GEM objects when necessary

drivers/gpu/drm/drm_gem.c | 183 +++++++++++++++++++++++++
drivers/gpu/drm/msm/msm_drv.c | 18 ++-
drivers/gpu/drm/msm/msm_drv.h | 70 +++++++---
drivers/gpu/drm/msm/msm_gem.c | 154 +++++++--------------
drivers/gpu/drm/msm/msm_gem.h | 112 +--------------
drivers/gpu/drm/msm/msm_gem_prime.c | 4 +-
drivers/gpu/drm/msm/msm_gem_shrinker.c | 164 ++++++++++------------
drivers/gpu/drm/msm/msm_gem_submit.c | 78 ++++-------
drivers/gpu/drm/msm/msm_gpu.c | 3 -
drivers/gpu/drm/msm/msm_gpu.h | 10 +-
drivers/gpu/drm/msm/msm_gpu_trace.h | 36 +++--
drivers/gpu/drm/msm/msm_submitqueue.c | 1 +
include/drm/drm_gem.h | 56 ++++++++
13 files changed, 485 insertions(+), 404 deletions(-)

--
2.36.1