Lines Matching refs:cache
62 struct drm_pagemap_cache *cache = arg; in drm_pagemap_cache_fini() local
65 drm_dbg(cache->shrinker->drm, "Destroying dpagemap cache.\n"); in drm_pagemap_cache_fini()
66 spin_lock(&cache->lock); in drm_pagemap_cache_fini()
67 dpagemap = cache->dpagemap; in drm_pagemap_cache_fini()
68 cache->dpagemap = NULL; in drm_pagemap_cache_fini()
71 spin_unlock(&cache->lock); in drm_pagemap_cache_fini()
76 mutex_destroy(&cache->lookup_mutex); in drm_pagemap_cache_fini()
77 kfree(cache); in drm_pagemap_cache_fini()
93 struct drm_pagemap_cache *cache = kzalloc_obj(*cache); in drm_pagemap_cache_create_devm() local
96 if (!cache) in drm_pagemap_cache_create_devm()
99 mutex_init(&cache->lookup_mutex); in drm_pagemap_cache_create_devm()
100 spin_lock_init(&cache->lock); in drm_pagemap_cache_create_devm()
101 cache->shrinker = shrinker; in drm_pagemap_cache_create_devm()
102 init_completion(&cache->queued); in drm_pagemap_cache_create_devm()
103 err = devm_add_action_or_reset(shrinker->drm->dev, drm_pagemap_cache_fini, cache); in drm_pagemap_cache_create_devm()
107 return cache; in drm_pagemap_cache_create_devm()
144 int drm_pagemap_cache_lock_lookup(struct drm_pagemap_cache *cache) in drm_pagemap_cache_lock_lookup() argument
146 return mutex_lock_interruptible(&cache->lookup_mutex); in drm_pagemap_cache_lock_lookup()
154 void drm_pagemap_cache_unlock_lookup(struct drm_pagemap_cache *cache) in drm_pagemap_cache_unlock_lookup() argument
156 mutex_unlock(&cache->lookup_mutex); in drm_pagemap_cache_unlock_lookup()
175 struct drm_pagemap *drm_pagemap_get_from_cache(struct drm_pagemap_cache *cache) in drm_pagemap_get_from_cache() argument
180 lockdep_assert_held(&cache->lookup_mutex); in drm_pagemap_get_from_cache()
182 spin_lock(&cache->lock); in drm_pagemap_get_from_cache()
183 dpagemap = cache->dpagemap; in drm_pagemap_get_from_cache()
185 spin_unlock(&cache->lock); in drm_pagemap_get_from_cache()
190 spin_unlock(&cache->lock); in drm_pagemap_get_from_cache()
194 if (!try_wait_for_completion(&cache->queued)) { in drm_pagemap_get_from_cache()
195 spin_unlock(&cache->lock); in drm_pagemap_get_from_cache()
196 err = wait_for_completion_interruptible(&cache->queued); in drm_pagemap_get_from_cache()
203 cache->dpagemap = NULL; in drm_pagemap_get_from_cache()
204 spin_unlock(&cache->lock); in drm_pagemap_get_from_cache()
210 drm_pagemap_cache_set_pagemap(cache, dpagemap); in drm_pagemap_get_from_cache()
212 cache->dpagemap = NULL; in drm_pagemap_get_from_cache()
213 spin_unlock(&cache->lock); in drm_pagemap_get_from_cache()
229 void drm_pagemap_cache_set_pagemap(struct drm_pagemap_cache *cache, struct drm_pagemap *dpagemap) in drm_pagemap_cache_set_pagemap() argument
233 lockdep_assert_held(&cache->lookup_mutex); in drm_pagemap_cache_set_pagemap()
234 spin_lock(&cache->lock); in drm_pagemap_cache_set_pagemap()
235 dpagemap->cache = cache; in drm_pagemap_cache_set_pagemap()
236 swap(cache->dpagemap, dpagemap); in drm_pagemap_cache_set_pagemap()
237 reinit_completion(&cache->queued); in drm_pagemap_cache_set_pagemap()
238 spin_unlock(&cache->lock); in drm_pagemap_cache_set_pagemap()
252 struct drm_pagemap *drm_pagemap_get_from_cache_if_active(struct drm_pagemap_cache *cache) in drm_pagemap_get_from_cache_if_active() argument
256 spin_lock(&cache->lock); in drm_pagemap_get_from_cache_if_active()
257 dpagemap = drm_pagemap_get_unless_zero(cache->dpagemap); in drm_pagemap_get_from_cache_if_active()
258 spin_unlock(&cache->lock); in drm_pagemap_get_from_cache_if_active()
266 struct drm_pagemap_cache *cache = dpagemap->cache; in drm_pagemap_shrinker_cancel() local
267 struct drm_pagemap_shrinker *shrinker = cache->shrinker; in drm_pagemap_shrinker_cancel()
295 struct drm_pagemap_cache *cache = dpagemap->cache; in drm_pagemap_shrinker_might_lock() local
297 if (cache) in drm_pagemap_shrinker_might_lock()
298 might_lock(&cache->shrinker->lock); in drm_pagemap_shrinker_might_lock()
319 struct drm_pagemap_cache *cache; in drm_pagemap_shrinker_add() local
331 cache = dpagemap->cache; in drm_pagemap_shrinker_add()
332 if (!cache) { in drm_pagemap_shrinker_add()
337 shrinker = cache->shrinker; in drm_pagemap_shrinker_add()
342 complete_all(&cache->queued); in drm_pagemap_shrinker_add()
364 struct drm_pagemap_cache *cache; in drm_pagemap_shrinker_scan() local
382 cache = dpagemap->cache; in drm_pagemap_shrinker_scan()
383 spin_lock(&cache->lock); in drm_pagemap_shrinker_scan()
384 cache->dpagemap = NULL; in drm_pagemap_shrinker_scan()
385 spin_unlock(&cache->lock); in drm_pagemap_shrinker_scan()