[PATCH v6 10/16] drm/msm/gem: Extract bookkeeping init helper

From: Rob Clark

Date: Fri Jul 17 2026 - 16:53:07 EST


Clean up duplicated logic between import and new paths.

Signed-off-by: Rob Clark <robin.clark@xxxxxxxxxxxxxxxx>
---
drivers/gpu/drm/msm/msm_gem.c | 34 +++++++++++++++-------------------
1 file changed, 15 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index 1aa844ce4f2c..59143be07428 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -1232,10 +1232,21 @@ static int msm_gem_new_impl(struct drm_device *dev, uint32_t flags,
return 0;
}

+static int msm_gem_init_bookkeeping(struct drm_gem_object *obj)
+{
+ struct msm_drm_private *priv = obj->dev->dev_private;
+
+ drm_gem_lru_move_tail(&priv->lru.unbacked, obj);
+
+ mutex_lock(&priv->obj_lock);
+ list_add_tail(&to_msm_bo(obj)->node, &priv->objects);
+ mutex_unlock(&priv->obj_lock);
+
+ return drm_gem_create_mmap_offset(obj);
+}
+
struct drm_gem_object *msm_gem_new(struct drm_device *dev, size_t size, uint32_t flags)
{
- struct msm_drm_private *priv = dev->dev_private;
- struct msm_gem_object *msm_obj;
struct drm_gem_object *obj = NULL;
int ret;

@@ -1251,8 +1262,6 @@ struct drm_gem_object *msm_gem_new(struct drm_device *dev, size_t size, uint32_t
if (ret)
return ERR_PTR(ret);

- msm_obj = to_msm_bo(obj);
-
ret = drm_gem_object_init(dev, obj, size);
if (ret)
goto fail;
@@ -1264,13 +1273,7 @@ struct drm_gem_object *msm_gem_new(struct drm_device *dev, size_t size, uint32_t
*/
mapping_set_gfp_mask(obj->filp->f_mapping, GFP_HIGHUSER);

- drm_gem_lru_move_tail(&priv->lru.unbacked, obj);
-
- mutex_lock(&priv->obj_lock);
- list_add_tail(&msm_obj->node, &priv->objects);
- mutex_unlock(&priv->obj_lock);
-
- ret = drm_gem_create_mmap_offset(obj);
+ ret = msm_gem_init_bookkeeping(obj);
if (ret)
goto fail;

@@ -1284,7 +1287,6 @@ struct drm_gem_object *msm_gem_new(struct drm_device *dev, size_t size, uint32_t
struct drm_gem_object *msm_gem_import(struct drm_device *dev,
struct dma_buf *dmabuf, struct sg_table *sgt)
{
- struct msm_drm_private *priv = dev->dev_private;
struct msm_gem_object *msm_obj;
struct drm_gem_object *obj;
size_t size, npages;
@@ -1313,13 +1315,7 @@ struct drm_gem_object *msm_gem_import(struct drm_device *dev,
goto fail;
}

- drm_gem_lru_move_tail(&priv->lru.pinned, obj);
-
- mutex_lock(&priv->obj_lock);
- list_add_tail(&msm_obj->node, &priv->objects);
- mutex_unlock(&priv->obj_lock);
-
- ret = drm_gem_create_mmap_offset(obj);
+ ret = msm_gem_init_bookkeeping(obj);
if (ret)
goto fail;

--
2.55.0