drm_private_obj does not carry a human-readable name, which makes
debug messages hard to interpret when multiple private objects are
registered on the same device.

Add a name field to drm_private_obj, passed through
drm_atomic_private_obj_init() and freed in
drm_atomic_private_obj_fini(). Update the existing callers to pass a
name.

Reviewed-by: Maarten Lankhorst <[email protected]>
Signed-off-by: Maxime Ripard <[email protected]>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c       |  1 +
 drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c |  8 ++++++++
 drivers/gpu/drm/display/drm_dp_mst_topology.c           |  2 +-
 drivers/gpu/drm/display/drm_dp_tunnel.c                 |  1 +
 drivers/gpu/drm/drm_atomic.c                            | 12 ++++++++++++
 drivers/gpu/drm/drm_bridge.c                            | 10 +++++++++-
 drivers/gpu/drm/ingenic/ingenic-drm-drv.c               |  1 +
 drivers/gpu/drm/ingenic/ingenic-ipu.c                   |  1 +
 drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c                 |  1 +
 drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c                |  1 +
 drivers/gpu/drm/omapdrm/omap_drv.c                      |  1 +
 drivers/gpu/drm/tegra/hub.c                             |  1 +
 drivers/gpu/drm/vc4/vc4_kms.c                           |  3 +++
 include/drm/drm_atomic.h                                |  7 ++++++-
 include/drm/drm_bridge.h                                |  2 ++
 15 files changed, 49 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 5e106b65034d..32b582f31f0e 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -2314,4 +2314,5 @@ STATIC_IFN_KUNIT int amdgpu_dm_mode_config_init(struct 
amdgpu_device *adev)
        drm_atomic_private_obj_init(adev_to_drm(adev),
                                    &adev->dm.atomic_obj,
+                                   "amdgpu_dc_state",
                                    &dm_atomic_state_funcs);
 
diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c 
b/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c
index 77b3f361091f..8a3c9fcf3844 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_private_obj.c
@@ -67,4 +67,5 @@ static int komeda_layer_obj_add(struct komeda_kms_dev *kms,
 {
        drm_atomic_private_obj_init(&kms->base, &layer->base.obj,
+                                   "komeda_layer",
                                    &komeda_layer_obj_funcs);
        return 0;
@@ -120,4 +121,5 @@ static int komeda_scaler_obj_add(struct komeda_kms_dev *kms,
        drm_atomic_private_obj_init(&kms->base,
                                    &scaler->base.obj,
+                                   "komeda_scaler",
                                    &komeda_scaler_obj_funcs);
        return 0;
@@ -172,4 +174,5 @@ static int komeda_compiz_obj_add(struct komeda_kms_dev *kms,
 {
        drm_atomic_private_obj_init(&kms->base, &compiz->base.obj,
+                                   "komeda_compiz",
                                    &komeda_compiz_obj_funcs);
 
@@ -226,4 +229,5 @@ static int komeda_splitter_obj_add(struct komeda_kms_dev 
*kms,
        drm_atomic_private_obj_init(&kms->base,
                                    &splitter->base.obj,
+                                   "komeda_splitter",
                                    &komeda_splitter_obj_funcs);
 
@@ -279,4 +283,5 @@ static int komeda_merger_obj_add(struct komeda_kms_dev *kms,
        drm_atomic_private_obj_init(&kms->base,
                                    &merger->base.obj,
+                                   "komeda_merger",
                                    &komeda_merger_obj_funcs);
 
@@ -332,4 +337,5 @@ static int komeda_improc_obj_add(struct komeda_kms_dev *kms,
 {
        drm_atomic_private_obj_init(&kms->base, &improc->base.obj,
+                                   "komeda_improc",
                                    &komeda_improc_obj_funcs);
 
@@ -385,4 +391,5 @@ static int komeda_timing_ctrlr_obj_add(struct 
komeda_kms_dev *kms,
 {
        drm_atomic_private_obj_init(&kms->base, &ctrlr->base.obj,
+                                   "komeda_timing_ctrlr",
                                    &komeda_timing_ctrlr_obj_funcs);
 
@@ -439,4 +446,5 @@ static int komeda_pipeline_obj_add(struct komeda_kms_dev 
*kms,
 {
        drm_atomic_private_obj_init(&kms->base, &pipe->obj,
+                                   "komeda_pipeline",
                                    &komeda_pipeline_obj_funcs);
 
diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c 
b/drivers/gpu/drm/display/drm_dp_mst_topology.c
index b7fce0bf8acc..c7c3f6b0cf76 100644
--- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
@@ -5775,5 +5775,5 @@ int drm_dp_mst_topology_mgr_init(struct 
drm_dp_mst_topology_mgr *mgr,
        mgr->conn_base_id = conn_base_id;
 
-       drm_atomic_private_obj_init(dev, &mgr->base,
+       drm_atomic_private_obj_init(dev, &mgr->base, "drm_dp_mst_topology",
                                    &drm_dp_mst_topology_state_funcs);
 
diff --git a/drivers/gpu/drm/display/drm_dp_tunnel.c 
b/drivers/gpu/drm/display/drm_dp_tunnel.c
index d29ad4116e64..391d643793eb 100644
--- a/drivers/gpu/drm/display/drm_dp_tunnel.c
+++ b/drivers/gpu/drm/display/drm_dp_tunnel.c
@@ -1733,4 +1733,5 @@ static bool init_group(struct drm_dp_tunnel_mgr *mgr, 
struct drm_dp_tunnel_group
 
        drm_atomic_private_obj_init(mgr->dev, &group->base,
+                                   group->name,
                                    &tunnel_group_funcs);
 
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index 8f9b17395b90..039be737fd07 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -1016,4 +1016,5 @@ static void drm_atomic_plane_print_state(struct 
drm_printer *p,
  * @dev: DRM device this object will be attached to
  * @obj: private object
+ * @name: human-readable name for debug messages
  * @funcs: pointer to the struct of function pointers that identify the object
  * type
@@ -1027,4 +1028,5 @@ static void drm_atomic_plane_print_state(struct 
drm_printer *p,
 int drm_atomic_private_obj_init(struct drm_device *dev,
                                struct drm_private_obj *obj,
+                               const char *name,
                                const struct drm_private_state_funcs *funcs)
 {
@@ -1045,4 +1047,10 @@ int drm_atomic_private_obj_init(struct drm_device *dev,
        obj->dev = dev;
        obj->funcs = funcs;
+       obj->name = kstrdup(name, GFP_KERNEL);
+       if (!obj->name) {
+               ret = -ENOMEM;
+               goto err_lock_fini;
+       }
+
        list_add_tail(&obj->head, &dev->mode_config.privobj_list);
 
@@ -1059,4 +1067,7 @@ int drm_atomic_private_obj_init(struct drm_device *dev,
 err_list_del:
        list_del_init(&obj->head);
+       kfree(obj->name);
+       obj->name = NULL;
+err_lock_fini:
        drm_modeset_lock_fini(&obj->lock);
        return ret;
@@ -1084,4 +1095,5 @@ drm_atomic_private_obj_fini(struct drm_private_obj *obj)
        list_del(&obj->head);
        obj->funcs->atomic_destroy_state(obj, obj->state);
+       kfree(obj->name);
        drm_modeset_lock_fini(&obj->lock);
 }
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
index e7f9e6d58927..ac65ac941691 100644
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
@@ -318,4 +318,5 @@ static void __drm_bridge_free(struct kref *kref)
        drm_bridge_put(bridge->next_bridge);
 
+       kfree(bridge->name);
        kfree(bridge->container);
 }
@@ -419,4 +420,11 @@ void *__devm_drm_bridge_alloc(struct device *dev, size_t 
size, size_t offset,
 
        bridge = container + offset;
+
+       bridge->name = kasprintf(GFP_KERNEL, "bridge-%s", dev_name(dev));
+       if (!bridge->name) {
+               kfree(container);
+               return ERR_PTR(-ENOMEM);
+       }
+
        INIT_LIST_HEAD(&bridge->list);
        bridge->container = container;
@@ -650,5 +658,5 @@ int drm_bridge_attach(struct drm_encoder *encoder, struct 
drm_bridge *bridge,
        }
 
-       drm_atomic_private_obj_init(bridge->dev, &bridge->base,
+       drm_atomic_private_obj_init(bridge->dev, &bridge->base, bridge->name,
                                    &drm_bridge_priv_state_funcs);
 
diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c 
b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
index fff1ba598e96..1afac110bc28 100644
--- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
+++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
@@ -1405,4 +1405,5 @@ static int ingenic_drm_bind(struct device *dev, bool 
has_components)
 
        drm_atomic_private_obj_init(drm, &priv->private_obj,
+                                   "ingenic_drm",
                                    &ingenic_drm_private_state_funcs);
 
diff --git a/drivers/gpu/drm/ingenic/ingenic-ipu.c 
b/drivers/gpu/drm/ingenic/ingenic-ipu.c
index bf24882e8d9f..795f6db5ce59 100644
--- a/drivers/gpu/drm/ingenic/ingenic-ipu.c
+++ b/drivers/gpu/drm/ingenic/ingenic-ipu.c
@@ -903,4 +903,5 @@ static int ingenic_ipu_bind(struct device *dev, struct 
device *master, void *d)
 
        drm_atomic_private_obj_init(drm, &ipu->private_obj,
+                                   "ingenic_ipu_state",
                                    &ingenic_ipu_private_state_funcs);
 
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index da3556eb6ecc..fb3a0c847a9e 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -1156,4 +1156,5 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
 
        drm_atomic_private_obj_init(dpu_kms->dev, &dpu_kms->global_state,
+                                   "dpu_kms_global_state",
                                    &dpu_kms_global_state_funcs);
 
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c 
b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
index 3934cd060b27..b53f59f25fb0 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
@@ -713,4 +713,5 @@ static int mdp5_init(struct platform_device *pdev, struct 
drm_device *dev)
 
        drm_atomic_private_obj_init(mdp5_kms->dev, &mdp5_kms->glob_state,
+                                   "mdp5_global_state",
                                    &mdp5_global_state_funcs);
 
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c 
b/drivers/gpu/drm/omapdrm/omap_drv.c
index db216c888a8f..3f66cd66443f 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -300,4 +300,5 @@ static int omap_global_obj_init(struct drm_device *dev)
 
        drm_atomic_private_obj_init(dev, &priv->glob_obj,
+                                   "omap_global",
                                    &omap_global_state_funcs);
        return 0;
diff --git a/drivers/gpu/drm/tegra/hub.c b/drivers/gpu/drm/tegra/hub.c
index 448f49f3a7d7..854b671dfec8 100644
--- a/drivers/gpu/drm/tegra/hub.c
+++ b/drivers/gpu/drm/tegra/hub.c
@@ -961,4 +961,5 @@ static int tegra_display_hub_init(struct host1x_client 
*client)
 
        drm_atomic_private_obj_init(drm, &hub->base,
+                                   "tegra_display_hub",
                                    &tegra_display_hub_state_funcs);
 
diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c
index ab551eb2da50..e43d59cff4df 100644
--- a/drivers/gpu/drm/vc4/vc4_kms.c
+++ b/drivers/gpu/drm/vc4/vc4_kms.c
@@ -118,4 +118,5 @@ static int vc4_ctm_obj_init(struct vc4_dev *vc4)
 
        drm_atomic_private_obj_init(&vc4->base, &vc4->ctm_manager,
+                                   "vc4_ctm",
                                    &vc4_ctm_state_funcs);
 
@@ -758,4 +759,5 @@ static int vc4_load_tracker_obj_init(struct vc4_dev *vc4)
 {
        drm_atomic_private_obj_init(&vc4->base, &vc4->load_tracker,
+                                   "vc4_load_tracker",
                                    &vc4_load_tracker_state_funcs);
 
@@ -849,4 +851,5 @@ static int vc4_hvs_channels_obj_init(struct vc4_dev *vc4)
 {
        drm_atomic_private_obj_init(&vc4->base, &vc4->hvs_channels,
+                                   "vc4_hvs_channels",
                                    &vc4_hvs_state_funcs);
 
diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h
index 3ae35b09c0cf..87f85a77e5f3 100644
--- a/include/drm/drm_atomic.h
+++ b/include/drm/drm_atomic.h
@@ -376,4 +376,9 @@ struct drm_private_obj {
        struct drm_device *dev;
 
+       /**
+        * @name: human-readable name for debug messages
+        */
+       const char *name;
+
        /**
         * @head: List entry used to attach a private object to a &drm_device
@@ -757,5 +762,5 @@ drm_atomic_get_connector_state(struct drm_atomic_commit 
*state,
 
 int drm_atomic_private_obj_init(struct drm_device *dev,
-                               struct drm_private_obj *obj,
+                               struct drm_private_obj *obj, const char *name,
                                const struct drm_private_state_funcs *funcs);
 void drm_atomic_private_obj_fini(struct drm_private_obj *obj);
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
index 1981d24a700d..54cf0d223bba 100644
--- a/include/drm/drm_bridge.h
+++ b/include/drm/drm_bridge.h
@@ -1032,4 +1032,6 @@ struct drm_bridge {
        /** @dev: DRM device this bridge belongs to */
        struct drm_device *dev;
+       /** @name: human-readable name for debug messages */
+       const char *name;
        /** @encoder: encoder to which this bridge is connected */
        struct drm_encoder *encoder;

-- 
2.55.0

Reply via email to