Use msm_obj->sgt rather than msm_obj->pages to determine that a obj is resident. The sgt is populated up-front for imported dma-bufs, so we will never go down the get_pages() path for imported objects.
Signed-off-by: Rob Clark <[email protected]> --- drivers/gpu/drm/msm/msm_gem.c | 6 ++++++ drivers/gpu/drm/msm/msm_gem.h | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index 2341f209adf5..3111d7389572 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c @@ -193,6 +193,9 @@ static struct page **get_pages(struct drm_gem_object *obj) msm_gem_assert_locked(obj); + if (drm_WARN_ON_ONCE(obj->dev, drm_gem_is_imported(obj))) + return ERR_PTR(-EINVAL); + if (!msm_obj->pages) { struct drm_device *dev = obj->dev; struct page **p; @@ -286,6 +289,9 @@ int msm_gem_make_resident_locked(struct drm_gem_object *obj, unsigned madv) if (err) return err; + if (is_resident(to_msm_bo(obj))) + return 0; + struct page **pages = get_pages(obj); if (IS_ERR(pages)) return PTR_ERR(pages); diff --git a/drivers/gpu/drm/msm/msm_gem.h b/drivers/gpu/drm/msm/msm_gem.h index 4f681100ecb0..e92c6723d352 100644 --- a/drivers/gpu/drm/msm/msm_gem.h +++ b/drivers/gpu/drm/msm/msm_gem.h @@ -422,7 +422,7 @@ static inline bool is_unevictable(struct msm_gem_object *msm_obj) /* Are backing pages/sgt allocated? */ static inline bool is_resident(struct msm_gem_object *msm_obj) { - return !!msm_obj->pages; + return !!msm_obj->sgt; } void msm_gem_purge(struct drm_gem_object *obj); -- 2.55.0
