drm/msm/gem: Check for active in shrinker path
Currently in our shrinker path we shouldn't be encountering anything that is active, but this will change in subsequent patches. So check if there are unsignaled fences. Signed-off-by: Rob Clark <robdclark@chromium.org> Patchwork: https://patchwork.freedesktop.org/patch/496117/ Link: https://lore.kernel.org/r/20220802155152.1727594-5-robdclark@gmail.com
This commit is contained in:
parent
05ba44b370
commit
01780d0263
|
@ -870,6 +870,16 @@ static void update_inactive(struct msm_gem_object *msm_obj)
|
|||
mutex_unlock(&priv->mm_lock);
|
||||
}
|
||||
|
||||
bool msm_gem_active(struct drm_gem_object *obj)
|
||||
{
|
||||
GEM_WARN_ON(!msm_gem_is_locked(obj));
|
||||
|
||||
if (to_msm_bo(obj)->pin_count)
|
||||
return true;
|
||||
|
||||
return !dma_resv_test_signaled(obj->resv, dma_resv_usage_rw(true));
|
||||
}
|
||||
|
||||
int msm_gem_cpu_prep(struct drm_gem_object *obj, uint32_t op, ktime_t *timeout)
|
||||
{
|
||||
bool write = !!(op & MSM_PREP_WRITE);
|
||||
|
|
|
@ -173,6 +173,7 @@ void msm_gem_put_vaddr(struct drm_gem_object *obj);
|
|||
int msm_gem_madvise(struct drm_gem_object *obj, unsigned madv);
|
||||
void msm_gem_active_get(struct drm_gem_object *obj, struct msm_gpu *gpu);
|
||||
void msm_gem_active_put(struct drm_gem_object *obj);
|
||||
bool msm_gem_active(struct drm_gem_object *obj);
|
||||
int msm_gem_cpu_prep(struct drm_gem_object *obj, uint32_t op, ktime_t *timeout);
|
||||
int msm_gem_cpu_fini(struct drm_gem_object *obj);
|
||||
int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file,
|
||||
|
|
|
@ -43,6 +43,9 @@ purge(struct msm_gem_object *msm_obj)
|
|||
if (!is_purgeable(msm_obj))
|
||||
return false;
|
||||
|
||||
if (msm_gem_active(&msm_obj->base))
|
||||
return false;
|
||||
|
||||
/*
|
||||
* This will move the obj out of still_in_list to
|
||||
* the purged list
|
||||
|
@ -58,6 +61,9 @@ evict(struct msm_gem_object *msm_obj)
|
|||
if (is_unevictable(msm_obj))
|
||||
return false;
|
||||
|
||||
if (msm_gem_active(&msm_obj->base))
|
||||
return false;
|
||||
|
||||
msm_gem_evict(&msm_obj->base);
|
||||
|
||||
return true;
|
||||
|
|
Loading…
Reference in New Issue