aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorRob Clark <robdclark@chromium.org>2025-06-29 13:12:46 -0700
committerRob Clark <robin.clark@oss.qualcomm.com>2025-07-04 11:09:43 -0700
commit02070f04987524caf77d4bf4c94ebceb783b7bcc (patch)
treee0ac08daca4eca02f3615eec411557f4903499f5 /include
parentdrm/gpuvm: Add locking helpers (diff)
downloadlinux-02070f04987524caf77d4bf4c94ebceb783b7bcc.tar.gz
linux-02070f04987524caf77d4bf4c94ebceb783b7bcc.zip
drm/gem: Add ww_acquire_ctx support to drm_gem_lru_scan()
If the callback is going to have to attempt to grab more locks, it is useful to have an ww_acquire_ctx to avoid locking order problems. Why not use the drm_exec helper instead? Mainly because (a) where ww_acquire_init() is called is awkward, and (b) we don't really need to retry after backoff, we can just move on to the next object. Signed-off-by: Rob Clark <robdclark@chromium.org> Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com> Tested-by: Antonino Maniscalco <antomani103@gmail.com> Reviewed-by: Antonino Maniscalco <antomani103@gmail.com> Patchwork: https://patchwork.freedesktop.org/patch/661463/
Diffstat (limited to 'include')
-rw-r--r--include/drm/drm_gem.h10
1 files changed, 6 insertions, 4 deletions
diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h
index 1a79ec3fe45c..d3a7b43e2c63 100644
--- a/include/drm/drm_gem.h
+++ b/include/drm/drm_gem.h
@@ -560,10 +560,12 @@ void drm_gem_lru_init(struct drm_gem_lru *lru, struct mutex *lock);
void drm_gem_lru_remove(struct drm_gem_object *obj);
void drm_gem_lru_move_tail_locked(struct drm_gem_lru *lru, struct drm_gem_object *obj);
void drm_gem_lru_move_tail(struct drm_gem_lru *lru, struct drm_gem_object *obj);
-unsigned long drm_gem_lru_scan(struct drm_gem_lru *lru,
- unsigned int nr_to_scan,
- unsigned long *remaining,
- bool (*shrink)(struct drm_gem_object *obj));
+unsigned long
+drm_gem_lru_scan(struct drm_gem_lru *lru,
+ unsigned int nr_to_scan,
+ unsigned long *remaining,
+ bool (*shrink)(struct drm_gem_object *obj, struct ww_acquire_ctx *ticket),
+ struct ww_acquire_ctx *ticket);
int drm_gem_evict_locked(struct drm_gem_object *obj);