From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3D27537AA79 for ; Thu, 23 Apr 2026 10:18:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776939525; cv=none; b=i9hDzSpbd5WtBYBmMDWHYDwrdt2mHgRoCAyBnLdp9RcSeDtf4m9raXslcZUAVCP+GZm0hDzueZ+qJ84JnspYTYK9PMm0uTbBWjzvo6X+vLl+iOsB3vPejiIDp9dpHw9GhigPi1h5h2LmzvIiRhLBj86n1/VjozPTI5yatgncKE4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776939525; c=relaxed/simple; bh=8Um5jm6/pPpXUqr5LcfqQ0vX4F+G2aZnGx6nrOgt1ME=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OjQlNl4CQm30ro/EEY9+drIWkmja3OKTV0Qfnk9U+3926hr23w31q6z97+sjVhQ4MWeL8X7hztDSLRUDEsj0uFgenShLK/AY1CYzDfEh4/CJMfVVPv6bgK4YM91eP2ojq4B3Hag0nqtwE6BZ5W2w3gWbPRgv0YBZzSdeMeI95ms= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=vEeG30uz; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="vEeG30uz" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 474B8C2BCAF; Thu, 23 Apr 2026 10:18:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776939524; bh=8Um5jm6/pPpXUqr5LcfqQ0vX4F+G2aZnGx6nrOgt1ME=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=vEeG30uzb6rLcTrmJUyxhwkSmsXkKAuFWxjy2Yn6i2JXDpcR5fWclQ+ua4m/9VmX0 J3Ltja1xznLIlz5U/eiwpIZQEdpJ/ZVMFMpUi+nWpTdGuwAC/4Tn/xtOChgjuxfAl/ QkwwECHXTUOz3Q/7sFDmZCh5Pq66FTXF9bYxeoZWwVLiLsCuuKAXFKgW6qXhYFrnKD GD4J9SEQY/p74gXN7Mm1xVdam0AKaANxGIDjibT5XB0yLuv8ccy8ZfjvbsvEAPTbq9 5RpIUmb8jMTXwmEAh6kZmJu981beWRhtaA13aRsQpRDWBnnv/lnGHuy/4lGaWQPTYW YN66hI5EHZp8Q== From: Maxime Ripard Date: Thu, 23 Apr 2026 12:18:18 +0200 Subject: [PATCH v2 05/28] drm/atomic: Add drm_private_obj name Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260423-drm-state-readout-v2-5-8549f87cb978@kernel.org> References: <20260423-drm-state-readout-v2-0-8549f87cb978@kernel.org> In-Reply-To: <20260423-drm-state-readout-v2-0-8549f87cb978@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Jyri Sarha , Tomi Valkeinen Cc: Devarsh Thakkar , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=16333; i=mripard@kernel.org; h=from:subject:message-id; bh=8Um5jm6/pPpXUqr5LcfqQ0vX4F+G2aZnGx6nrOgt1ME=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJkvP768KWV0VTW2cg5fgZ66wtNMbh5DpjVMGVl6IcllS y4ei33WMZWFQZiTQVZMkeWJTNjp5e2LqxzsV/6AmcPKBDKEgYtTACZiVsPYcO/rb+MzTrz3VJ03 JlfWFT/jL1+lXzNr6baJDi8zw9POszDUdN/ln7vH26pnwyX7BTulGBu+vVkRax2Zo/Hjt3TPyWV bD8VKRbLX7rC8cMedx5tz7dqJa4QPfjzctvf+LJ+6XRdObUwFAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D 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. Signed-off-by: Maxime Ripard --- 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 | 4 ++++ drivers/gpu/drm/drm_bridge.c | 3 ++- 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, 34 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 c2066319772b..d993f6e5f3e6 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -5020,10 +5020,11 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev) /* indicates support for immediate flip */ adev_to_drm(adev)->mode_config.async_page_flip = true; drm_atomic_private_obj_init(adev_to_drm(adev), &adev->dm.atomic_obj, + "amdgpu_dc_state", &dm_atomic_state_funcs); r = amdgpu_display_modeset_create_props(adev); if (r) return r; 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 @@ -64,10 +64,11 @@ static const struct drm_private_state_funcs komeda_layer_obj_funcs = { static int komeda_layer_obj_add(struct komeda_kms_dev *kms, struct komeda_layer *layer) { drm_atomic_private_obj_init(&kms->base, &layer->base.obj, + "komeda_layer", &komeda_layer_obj_funcs); return 0; } static struct drm_private_state * @@ -117,10 +118,11 @@ static const struct drm_private_state_funcs komeda_scaler_obj_funcs = { static int komeda_scaler_obj_add(struct komeda_kms_dev *kms, struct komeda_scaler *scaler) { drm_atomic_private_obj_init(&kms->base, &scaler->base.obj, + "komeda_scaler", &komeda_scaler_obj_funcs); return 0; } static struct drm_private_state * @@ -169,10 +171,11 @@ static const struct drm_private_state_funcs komeda_compiz_obj_funcs = { static int komeda_compiz_obj_add(struct komeda_kms_dev *kms, struct komeda_compiz *compiz) { drm_atomic_private_obj_init(&kms->base, &compiz->base.obj, + "komeda_compiz", &komeda_compiz_obj_funcs); return 0; } @@ -223,10 +226,11 @@ static const struct drm_private_state_funcs komeda_splitter_obj_funcs = { static int komeda_splitter_obj_add(struct komeda_kms_dev *kms, struct komeda_splitter *splitter) { drm_atomic_private_obj_init(&kms->base, &splitter->base.obj, + "komeda_splitter", &komeda_splitter_obj_funcs); return 0; } @@ -276,10 +280,11 @@ static const struct drm_private_state_funcs komeda_merger_obj_funcs = { static int komeda_merger_obj_add(struct komeda_kms_dev *kms, struct komeda_merger *merger) { drm_atomic_private_obj_init(&kms->base, &merger->base.obj, + "komeda_merger", &komeda_merger_obj_funcs); return 0; } @@ -329,10 +334,11 @@ static const struct drm_private_state_funcs komeda_improc_obj_funcs = { static int komeda_improc_obj_add(struct komeda_kms_dev *kms, struct komeda_improc *improc) { drm_atomic_private_obj_init(&kms->base, &improc->base.obj, + "komeda_improc", &komeda_improc_obj_funcs); return 0; } @@ -382,10 +388,11 @@ static const struct drm_private_state_funcs komeda_timing_ctrlr_obj_funcs = { static int komeda_timing_ctrlr_obj_add(struct komeda_kms_dev *kms, struct komeda_timing_ctrlr *ctrlr) { drm_atomic_private_obj_init(&kms->base, &ctrlr->base.obj, + "komeda_timing_ctrlr", &komeda_timing_ctrlr_obj_funcs); return 0; } @@ -436,10 +443,11 @@ static const struct drm_private_state_funcs komeda_pipeline_obj_funcs = { static int komeda_pipeline_obj_add(struct komeda_kms_dev *kms, struct komeda_pipeline *pipe) { drm_atomic_private_obj_init(&kms->base, &pipe->obj, + "komeda_pipeline", &komeda_pipeline_obj_funcs); return 0; } diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c index 8757972e8e24..7936bb7e0bf6 100644 --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c @@ -5762,11 +5762,11 @@ int drm_dp_mst_topology_mgr_init(struct drm_dp_mst_topology_mgr *mgr, mgr->aux = aux; mgr->max_dpcd_transaction_bytes = max_dpcd_transaction_bytes; mgr->max_payloads = max_payloads; 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); return 0; } EXPORT_SYMBOL(drm_dp_mst_topology_mgr_init); diff --git a/drivers/gpu/drm/display/drm_dp_tunnel.c b/drivers/gpu/drm/display/drm_dp_tunnel.c index 6519b4244728..ff32ac855780 100644 --- a/drivers/gpu/drm/display/drm_dp_tunnel.c +++ b/drivers/gpu/drm/display/drm_dp_tunnel.c @@ -1599,10 +1599,11 @@ static bool init_group(struct drm_dp_tunnel_mgr *mgr, struct drm_dp_tunnel_group group->mgr = mgr; group->available_bw = -1; INIT_LIST_HEAD(&group->tunnels); drm_atomic_private_obj_init(mgr->dev, &group->base, + group->name, &tunnel_group_funcs); return true; } diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 84bc91886b4c..0a9f5e9fc69b 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -985,10 +985,11 @@ static void drm_atomic_plane_print_state(struct drm_printer *p, /** * drm_atomic_private_obj_init - initialize private object * @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 * * Initialize the private object, which can be embedded into any * driver private object that needs its own atomic state. @@ -996,17 +997,19 @@ static void drm_atomic_plane_print_state(struct drm_printer *p, * RETURNS: * Zero on success, error code on failure */ 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) { memset(obj, 0, sizeof(*obj)); drm_modeset_lock_init(&obj->lock); obj->dev = dev; + obj->name = kstrdup(name, GFP_KERNEL); obj->funcs = funcs; list_add_tail(&obj->head, &dev->mode_config.privobj_list); return 0; } @@ -1021,10 +1024,11 @@ EXPORT_SYMBOL(drm_atomic_private_obj_init); void 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); } EXPORT_SYMBOL(drm_atomic_private_obj_fini); /** diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index 986e4c79a4e0..44d53906e4c5 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -379,10 +379,11 @@ void *__devm_drm_bridge_alloc(struct device *dev, size_t size, size_t offset, bridge = container + offset; INIT_LIST_HEAD(&bridge->list); bridge->container = container; bridge->funcs = funcs; + bridge->name = devm_kasprintf(dev, GFP_KERNEL, "bridge-%s", dev_name(dev)); kref_init(&bridge->refcount); err = devm_add_action_or_reset(dev, drm_bridge_put_void, bridge); if (err) return ERR_PTR(err); @@ -586,11 +587,11 @@ int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, if (ret < 0) goto err_reset_bridge; } if (drm_bridge_is_atomic(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); return 0; err_reset_bridge: diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c index 4068114adf8c..135d8b08f213 100644 --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c @@ -1400,10 +1400,11 @@ static int ingenic_drm_bind(struct device *dev, bool has_components) dev_err(dev, "Unable to register clock notifier\n"); goto err_devclk_disable; } drm_atomic_private_obj_init(drm, &priv->private_obj, + "ingenic_drm", &ingenic_drm_private_state_funcs); ret = drmm_add_action_or_reset(drm, ingenic_drm_atomic_private_obj_fini, &priv->private_obj); if (ret) diff --git a/drivers/gpu/drm/ingenic/ingenic-ipu.c b/drivers/gpu/drm/ingenic/ingenic-ipu.c index 34545b9c8c33..17a0e5dc6df0 100644 --- a/drivers/gpu/drm/ingenic/ingenic-ipu.c +++ b/drivers/gpu/drm/ingenic/ingenic-ipu.c @@ -900,10 +900,11 @@ static int ingenic_ipu_bind(struct device *dev, struct device *master, void *d) dev_err(dev, "Unable to prepare clock\n"); return err; } drm_atomic_private_obj_init(drm, &ipu->private_obj, + "ingenic_ipu_state", &ingenic_ipu_private_state_funcs); return 0; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c index 35f7af4743d7..f72b94a60e9d 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -1153,10 +1153,11 @@ static int dpu_kms_hw_init(struct msm_kms *kms) dev->mode_config.cursor_width = 512; dev->mode_config.cursor_height = 512; drm_atomic_private_obj_init(dpu_kms->dev, &dpu_kms->global_state, + "dpu_kms_global_state", &dpu_kms_global_state_funcs); atomic_set(&dpu_kms->bandwidth_ref, 0); rc = pm_runtime_resume_and_get(&dpu_kms->pdev->dev); diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c index 2d26b07b06f5..1177f53a85fc 100644 --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c @@ -715,10 +715,11 @@ static int mdp5_init(struct platform_device *pdev, struct drm_device *dev) int ret; mdp5_kms->dev = dev; drm_atomic_private_obj_init(mdp5_kms->dev, &mdp5_kms->glob_state, + "mdp5_global_state", &mdp5_global_state_funcs); /* we need to set a default rate before enabling. Set a safe * rate first, then figure out hw revision, and then set a * more optimal rate: diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c index ae678696fbac..da7722e9b538 100644 --- a/drivers/gpu/drm/omapdrm/omap_drv.c +++ b/drivers/gpu/drm/omapdrm/omap_drv.c @@ -298,10 +298,11 @@ static const struct drm_private_state_funcs omap_global_state_funcs = { static int omap_global_obj_init(struct drm_device *dev) { struct omap_drm_private *priv = dev->dev_private; drm_atomic_private_obj_init(dev, &priv->glob_obj, + "omap_global", &omap_global_state_funcs); return 0; } static void omap_global_obj_fini(struct omap_drm_private *priv) diff --git a/drivers/gpu/drm/tegra/hub.c b/drivers/gpu/drm/tegra/hub.c index 10d993b8d043..94f9aa690f59 100644 --- a/drivers/gpu/drm/tegra/hub.c +++ b/drivers/gpu/drm/tegra/hub.c @@ -956,10 +956,11 @@ static int tegra_display_hub_init(struct host1x_client *client) struct tegra_display_hub *hub = to_tegra_display_hub(client); struct drm_device *drm = dev_get_drvdata(client->host); struct tegra_drm *tegra = drm->dev_private; drm_atomic_private_obj_init(drm, &hub->base, + "tegra_display_hub", &tegra_display_hub_state_funcs); tegra->hub = hub; return 0; diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c index 264b5e80c24d..f6ac2a20576e 100644 --- a/drivers/gpu/drm/vc4/vc4_kms.c +++ b/drivers/gpu/drm/vc4/vc4_kms.c @@ -115,10 +115,11 @@ static void vc4_ctm_obj_fini(struct drm_device *dev, void *unused) static int vc4_ctm_obj_init(struct vc4_dev *vc4) { drm_modeset_lock_init(&vc4->ctm_state_lock); drm_atomic_private_obj_init(&vc4->base, &vc4->ctm_manager, + "vc4_ctm", &vc4_ctm_state_funcs); return drmm_add_action_or_reset(&vc4->base, vc4_ctm_obj_fini, NULL); } @@ -755,10 +756,11 @@ static void vc4_load_tracker_obj_fini(struct drm_device *dev, void *unused) } 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); return drmm_add_action_or_reset(&vc4->base, vc4_load_tracker_obj_fini, NULL); } @@ -846,10 +848,11 @@ static void vc4_hvs_channels_obj_fini(struct drm_device *dev, void *unused) } 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); return drmm_add_action_or_reset(&vc4->base, vc4_hvs_channels_obj_fini, NULL); } diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h index 537092d3ed16..4f58289d3a34 100644 --- a/include/drm/drm_atomic.h +++ b/include/drm/drm_atomic.h @@ -354,10 +354,15 @@ struct drm_private_obj { /** * @dev: parent DRM device */ 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 * (queued to &drm_mode_config.privobj_list). */ struct list_head head; @@ -735,11 +740,11 @@ drm_atomic_get_new_colorop_state(struct drm_atomic_state *state, struct drm_connector_state * __must_check drm_atomic_get_connector_state(struct drm_atomic_state *state, struct drm_connector *connector); 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); struct drm_private_state * __must_check drm_atomic_get_private_obj_state(struct drm_atomic_state *state, diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index d6cd0f5af045..84b5517726c1 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -1100,10 +1100,12 @@ enum drm_bridge_ops { struct drm_bridge { /** @base: inherit from &drm_private_object */ struct drm_private_obj base; /** @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; /** @chain_node: used to form a bridge chain */ struct list_head chain_node; /** @of_node: device node pointer to the bridge */ -- 2.53.0