drm/msm: Small msm_gem_purge() fix
Shoot down any mmap's *first* before put_pages(). Also add a WARN_ON
that the object is locked (to make it clear that this doesn't race with
msm_gem_fault()) and remove a redundant WARN_ON (since is_purgable()
already covers that case).
Fixes: 68209390f1
("drm/msm: shrinker support")
Signed-off-by: Rob Clark <robdclark@chromium.org>
Link: https://lore.kernel.org/r/20210405174532.1441497-8-robdclark@gmail.com
Signed-off-by: Rob Clark <robdclark@chromium.org>
This commit is contained in:
parent
64fcbde772
commit
81d4d597d4
|
@ -729,14 +729,16 @@ void msm_gem_purge(struct drm_gem_object *obj)
|
|||
struct drm_device *dev = obj->dev;
|
||||
struct msm_gem_object *msm_obj = to_msm_bo(obj);
|
||||
|
||||
GEM_WARN_ON(!msm_gem_is_locked(obj));
|
||||
GEM_WARN_ON(!is_purgeable(msm_obj));
|
||||
GEM_WARN_ON(obj->import_attach);
|
||||
|
||||
/* Get rid of any iommu mapping(s): */
|
||||
put_iova_spaces(obj, true);
|
||||
|
||||
msm_gem_vunmap(obj);
|
||||
|
||||
drm_vma_node_unmap(&obj->vma_node, dev->anon_inode->i_mapping);
|
||||
|
||||
put_pages(obj);
|
||||
|
||||
put_iova_vmas(obj);
|
||||
|
@ -744,7 +746,6 @@ void msm_gem_purge(struct drm_gem_object *obj)
|
|||
msm_obj->madv = __MSM_MADV_PURGED;
|
||||
update_inactive(msm_obj);
|
||||
|
||||
drm_vma_node_unmap(&obj->vma_node, dev->anon_inode->i_mapping);
|
||||
drm_gem_free_mmap_offset(obj);
|
||||
|
||||
/* Our goal here is to return as much of the memory as
|
||||
|
|
Loading…
Reference in New Issue