[PATCH 5/6] drm/msm/gem: Stop calling get_pages() for imported dma-bufs

From: Rob Clark

Date: Sat Sep 26 2026 - 14:35:38 EST


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 <robin.clark@xxxxxxxxxxxxxxxx>
---
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