From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 0DC21FED2D1 for ; Thu, 12 Mar 2026 06:04:56 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5FA7810E348; Thu, 12 Mar 2026 06:04:56 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="TxErv8Ut"; dkim-atps=neutral Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11011017.outbound.protection.outlook.com [40.107.130.17]) by gabe.freedesktop.org (Postfix) with ESMTPS id 47FC010E348 for ; Thu, 12 Mar 2026 06:04:54 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pBxoxCfFgPLSnrz8i24h+vBeAo3wr6+gKGY18ysGc5iGtVONvqHHjS+zjswshH2MiBBs457+kbw75Lnx3y7dNu5kGWjc02417JshAwqykathf0VpLcKmXmunY6v21Tc4Vz1ip2RiETrMxUnxIkTOAXpslhv4HFFridm/4m4z+8D3l7vYmQfHNH3tgncPntLVX7cYOIc4DMgrPnQlY3poBFCruoe4OEDXOXKYsSiVdNpfDrKjB3GJCxgcmmpKVomS6gRHsSO3S6R3+49z0ep5oAbbNslc7J5D+ajLcEybC2GVTJhy6/8Pc+HkERmjwDlUHhKFa/VqFh0WKnAB64UF/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=CoEdhnyXsKptwtiDS++OuPpiaOWqg2qSdWXpNZ0Xwto=; b=WlB7dE6NIa7ZbZjVrIYcrYmUMjLIkZHoPSwT3TJOGihB5MXppR048avX+6ny3Fg7m9YgWZdrrfe4FQkmmu4q2y5WoWPWT/w1aJNQ6HK4DerM3Q0HsPpMBMJMYKem4rI6/NzC1ONknOFJkocPa8L5bnWVyKqX47RdrHnPFaREuc7zXvqZ+6X16i0mqUje4G7iIuD93vRo8b5EBkRQdPOi5M5DzPBkro5FQ0H4smlVUSK9eXqNTAfUEM9m7A3c9sHA3SyWKC9IWCxwDcsM2KZCb3JWc3rFdQ1l2myl1fEefQegbsJkhODHadaZqkheDHRA88w51nTDe79ta2x0d7zEIQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CoEdhnyXsKptwtiDS++OuPpiaOWqg2qSdWXpNZ0Xwto=; b=TxErv8Utvm/hMx/qotow6YzJ4P37P7gsu8CO3NAOo1tVXAuhxl42EPs9P3P8Gvs1Fc3rXhkCS9pH7nkV2h0XJX9MiHY3KGtncqTo9U6ctvTx4UqiaGKIBXJhdw88+y17LF4VY5+0DiNbfEiKfDl0O1kqbcReW3BCEPKsQyELJVQLDVxemhQ1IJmGQNtKFA7Wm35X8/uoHVP9VBibOJmt2NJ3Q56nPdokeNCV3mLYXeFVy8CUDRFUbYcOWQNLq69VcwpRQR1WUAzYk4ARQrfhMnUnZerRkk1Nzrsh6UPmiSF0oreTvc0PZoQk1S8ZQwPKL2Vl26YuEqtEG0gd2fF7dQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM7PR04MB7046.eurprd04.prod.outlook.com (2603:10a6:20b:113::22) by PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.15; Thu, 12 Mar 2026 06:04:49 +0000 Received: from AM7PR04MB7046.eurprd04.prod.outlook.com ([fe80::4609:64af:8a4b:fd64]) by AM7PR04MB7046.eurprd04.prod.outlook.com ([fe80::4609:64af:8a4b:fd64%3]) with mapi id 15.20.9700.010; Thu, 12 Mar 2026 06:04:48 +0000 From: Liu Ying Date: Thu, 12 Mar 2026 14:05:33 +0800 Subject: [PATCH] drm/bridge: Fix refcount shown via debugfs for encoder_bridges_show() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260312-drm-misc-next-2026-03-05-fix-encoder-bridges-refcount-v1-1-b9ba3d844732@nxp.com> X-B4-Tracking: v=1; b=H4sIAKxXsmkC/x2NQQrCMBBFr1Jm7Yc0oRK9irjQZFJn0UQmrQRK7 250+f6D/3aqrMKVrsNOyh+pUnKH8TRQeD3yzJDYmayxZ+NGi6gLFqkBmduK3wzjYCYkaeAcSmT FUyXOXKGcQtnyCp88s0uTd+5C/fvdjbR/93Y/ji/DRIQQhwAAAA== To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Luca Ceresoli Cc: Marco Felsch , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Liu Ying X-Mailer: b4 0.13.0 X-ClientProxiedBy: MA5PR01CA0200.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:1b2::15) To AM7PR04MB7046.eurprd04.prod.outlook.com (2603:10a6:20b:113::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM7PR04MB7046:EE_|PAXPR04MB8510:EE_ X-MS-Office365-Filtering-Correlation-Id: dd07302f-5a53-430f-497a-08de7ffd447c X-LD-Processed: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|19092799006|52116014|7416014|376014|1800799024|38350700014|921020|56012099003|18002099003; X-Microsoft-Antispam-Message-Info: 6y32YIiERmk2VFFqacYPYPLvJXK3gHnWxJGD4NZP4PKnJM1m4oCqPFpvMCOePDKHd9lhbJ5Dr9XC0ltHVkihP23BmX6PkhfyCqBeE7WLUZflg7B3oGmfcPPcF/94xdk+Fw2i2m1uzcELQSJ7quaMvEcNca00w7ksmEvQ9ztsdWHDRexAgwR8LVJ6y4pFeTBYm9kOw0/o5vOdFpaocuvR1ekaJqDSaQ//TTX0graQ1vKkMcU5XFe4U3gi65fum+jUuCOFUsFl+23Tai7nUuga9jEkeeiBkV7u4uVoHVa/yYiNqxCtPSaGUDrBPag69/TqQQEF8waIKwqcVYWwrtvBONlErv1/6khlj3SGUaI9jUE5UIB71+N1tXr6z/BSkellj4keo94ELdkW4u6Q/u85/x+4qUQCCGHX447b9viWFX2Q9tMZsw0SZw3Pww3hSseTxykF8sXHRslMBQ5ynYUKB3dOhiQSV9sZheABG0e3QRFdj4l0NEgTio9KqccqbiuiqantxQLhG6xc2doTaSWnr4qcC8mrmSmRnIxvRBnW0k6JP4N40S8u4zNF92q5Omicqe3z8B3onbV/A4UJeGQlIF+AE+H555AZARX4JBEP57XSGkrWsV0VaGPqq0kMVnSyDemhQVXLuWg23ZkL/QiW7YPNMJU/vXK0LkI2HxJuiqHqxZ1WncqaY7vaVzsVhShDpnjfc+ByO59+NtMUBKnNCTWBBlniN/KN3SKpabPo/vm1Fro99wqYdtpyui/v/rTFZlYatpZT74kFp/tvln6kuIm3fap5HVNb564V9TB2e8PMrBEhLh9XoI4IEie4gklR X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR04MB7046.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(19092799006)(52116014)(7416014)(376014)(1800799024)(38350700014)(921020)(56012099003)(18002099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Y1RXWm00RUxkeFVyMUs4aGF3c2pWTDRPT3RMUHIzSmlpcWNyWjZWQ1RjTXdq?= =?utf-8?B?Um5BUjdoaTFPTVJkeWtJemFsM2dYUzBSaHRRUGcwSmxmaVE2R3hRL28yQlBO?= =?utf-8?B?Q1I0d2RtWm5XdURsa2VndzdlNE10Y0IveUxnbW1valpMR2EzWkRHVnJ0QlZJ?= =?utf-8?B?N3BNZkg4TW5CZVN5WWhrUytNV29XL3p6Z1I0Z2xDaFJWTU50M2ZaU0YxVHd0?= =?utf-8?B?UlZhV0laVXczRWVnbWQvK1l2dUlJWGxjWHRhQkMwQXdxbkxDb0UzZEZudENF?= =?utf-8?B?elN5Vklkajg4TzZKN0NRdkNSUGhSNE8rbkViV3Z2QkpkRmFFSnB5ekRIOG9S?= =?utf-8?B?a1dHOWs4NzQ2U0sxV0J6VkYxME1UOWhCcktJNC8rVjJQYXFKcHRiOXpncGJP?= =?utf-8?B?VTZPR0dvRmN4NDQ4RUNTTzRxaXhBRllKMm5HaE5yNnZLWVpyd0dWenZyR2ts?= =?utf-8?B?bnl4THY2Nm5teTI0Z00zT1A3MU1XaDBYTGtXVzlxakltZkw5SUlOKzZRa3RZ?= =?utf-8?B?OGc5MFIwWDBtOFZjdWYzUzhWVDFKaXl3RnBXUThGY25SclRGNVNtYWx0QW94?= =?utf-8?B?c3VRb1RvODJTaUIyVlFsVFdVVlNqZHpOQTdseDlncFhjRHR4MjUvNUREZUVP?= =?utf-8?B?aWRlOGt2WHdGS2JlQzRVcldlbTNXUFpqeFlZTjRQSGFGQ1lKRWI5SmV4TkFW?= =?utf-8?B?QnRTN1B3cmFoOENEaGV2OVZ2aDBobWtmTnhORlFVWlhWOXVESWhMYWF3SWww?= =?utf-8?B?WDFhUUpncTZKbk5idk8vZElJUEZ3bU5VdTg3ME1zODdWaTVxQVd1SVovM01W?= =?utf-8?B?MjBwQmZVTHdNR0NYY2pjUjNIdVd2blB0cDNNTVhPZnpMNGZXL1ZrVEgxUkxq?= =?utf-8?B?cWpyY1pPemJkMnFRWG9taG4zeUxEVE9mZDVJeHFncmN5cUFxdDZ4OUdNbEg4?= =?utf-8?B?TE5TTDVjRTJCbUJ5bkNGN3VQVVB0RkM3MnJFc09LeDdxVHVDYU1iN0ZZOFk3?= =?utf-8?B?NzlwWjg0amZwQTh6a1lLOVhTU2MrTGtFa1pNY0dBdXh1OFNwZVc4bmlNVVhr?= =?utf-8?B?WTl5U1ZzMzhtSE51ekZ1MUtPb3RCNkhpOVZlNnZzOUkxdFdKdGRjejFhV1F4?= =?utf-8?B?ajNqYzZPclliNTZubVRYQ1Y5QVBlUWtPTjVkVXJPVUhTOUFxMGplTmlRdFBE?= =?utf-8?B?dHA2MkowbXlNd2ZIVTFrMm1ycFBKNVg3SjFaRG9OWDRBUXh3RTZFVnYzMXZH?= =?utf-8?B?YTFZMzlBK3lvTE1uN0QrVUVBQjlYREJqSU85M29Za21PNVpqemlwSC9qNWZE?= =?utf-8?B?dzhjblNmZXRSRGxPcXQ1c3djSmhMS0VUaXcrWWR0aHc5Q1FOT1BNWGlicmZz?= =?utf-8?B?eVFFUmNCYmZkK056N25rK0F3QTFoR1VKYVpaOGVCWWNiUWpaV1dWaVlOZ3g0?= =?utf-8?B?Z3VOeGlWTTlselU3U2ZwZlBFR0RZTUNYRFRDVmljcGRDdjlLL29WK2RKcW40?= =?utf-8?B?WW9xRUxPZGFNVDhHNHlYYTF4YU50YTk5dWNlRGtqY3RMajJFZjRiaHpJbHlh?= =?utf-8?B?enVhcitab3lwY0RVYURJaW1RUXp1REoraG5jY21TelhiclJGRmhYWmI3ajJ0?= =?utf-8?B?eFBMYmZESUxWU1RIRkNyRC9DdlpPWGpXT3RQaWpPNmJpc1BYeGozZ0ozeWFP?= =?utf-8?B?Q0VXUTd6M1dHVHdRTVNleVVhbzJ6T3JsemNYdTk2aHcxcjBsaW5xT3ZZaWZr?= =?utf-8?B?ckZNeU9rSlBuTHE1ZzMzNnBwc2JEREMvbEtRSmFZdWQ1RUZpSXl3WXZodFFH?= =?utf-8?B?K3NReEloOVRmU2Y3bnJiME1VbktBcFlWVEpZNzRqVmRwNEpIY0U5Sittdzk5?= =?utf-8?B?cXpqQ3gzOHRJaDZYaHZwUzhBNVE5UnNIaGVxcktpU29XVUwyV0k4M1NvWGFz?= =?utf-8?B?QjJ3TEdOclNBc3BYSzFEcDBkdDRoczhxWlBzSXhIa29vQWlrRjZRdTNaUWZY?= =?utf-8?B?Q2RaNXNEVnpLUit1M3hicjZwckJWTE1jSEwrdXBYbExuZWdHTFVrSnJlNFA3?= =?utf-8?B?T2RHVXNtdnMvV3dyOC9NaGl2a2dGM2FWclYrVmZ1RTExeVJoU0tPV1NjNm44?= =?utf-8?B?Wno1eThNeHRQL3lDM1VlWU4vOXNzN0ZUbmxpNjR5UHRzT2Jnalh5aklWU2tq?= =?utf-8?B?aVNNT3M2UmdBNTVRbzF3V0VUQTNjT3U5QTd3a0JxdHI5blk5a0NLL1hyMVg4?= =?utf-8?B?WERrbFhsM0NvZFJqWXBqcEp6MVdoUXRXT1krc0xwNEZWY1Z2U1Q0YTBSTHJU?= =?utf-8?B?OUorN3A0eEsrdjZlbUNVMm44NWRZQXJQdEZJSkRBK3Z6YlhXRmk2dz09?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: dd07302f-5a53-430f-497a-08de7ffd447c X-MS-Exchange-CrossTenant-AuthSource: AM7PR04MB7046.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Mar 2026 06:04:48.8746 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9TSle6vi4tDxQ3FNZBwcbAf4ajbamTyusH6EZYmPJc/t/G/j8fod+ZXz9VWXt0j9GNS+0EpWeViRERbahiUArw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8510 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" A typical bridge refcount value is 3 after a bridge chain is formed: - devm_drm_bridge_alloc() initializes the refcount value to be 1. - drm_bridge_add() gets an additional reference hence 2. - drm_bridge_attach() gets the third reference hence 3. This typical refcount value aligns with allbridges_show()'s behaviour. However, since encoder_bridges_show() uses drm_for_each_bridge_in_chain_scoped() to automatically get/put the bridge reference while iterating, a bogus reference is accidentally got when showing the wrong typical refcount value as 4 to users via debugfs. Fix this by caching the refcount value returned from kref_read() while iterating and explicitly decreasing the cached refcount value by 1 before showing it to users. Fixes: bd57048e4576 ("drm/bridge: use drm_for_each_bridge_in_chain_scoped()") Signed-off-by: Liu Ying --- drivers/gpu/drm/drm_bridge.c | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index f8b0333a0a3b..84fc3cfd17e0 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -1567,14 +1567,18 @@ void devm_drm_put_bridge(struct device *dev, struct drm_bridge *bridge) } EXPORT_SYMBOL(devm_drm_put_bridge); -static void drm_bridge_debugfs_show_bridge(struct drm_printer *p, - struct drm_bridge *bridge, - unsigned int idx, - bool lingering) +static void __drm_bridge_debugfs_show_bridge(struct drm_printer *p, + struct drm_bridge *bridge, + unsigned int idx, + bool lingering, + bool scoped) { + unsigned int refcount = kref_read(&bridge->refcount); + drm_printf(p, "bridge[%u]: %ps\n", idx, bridge->funcs); - drm_printf(p, "\trefcount: %u%s\n", kref_read(&bridge->refcount), + drm_printf(p, "\trefcount: %u%s\n", + scoped ? --refcount : refcount, lingering ? " [lingering]" : ""); drm_printf(p, "\ttype: [%d] %s\n", @@ -1599,6 +1603,22 @@ static void drm_bridge_debugfs_show_bridge(struct drm_printer *p, drm_puts(p, "\n"); } +static void drm_bridge_debugfs_show_bridge(struct drm_printer *p, + struct drm_bridge *bridge, + unsigned int idx, + bool lingering) +{ + __drm_bridge_debugfs_show_bridge(p, bridge, idx, lingering, false); +} + +static void drm_bridge_debugfs_show_bridge_scoped(struct drm_printer *p, + struct drm_bridge *bridge, + unsigned int idx, + bool lingering) +{ + __drm_bridge_debugfs_show_bridge(p, bridge, idx, lingering, true); +} + static int allbridges_show(struct seq_file *m, void *data) { struct drm_printer p = drm_seq_file_printer(m); @@ -1626,7 +1646,7 @@ static int encoder_bridges_show(struct seq_file *m, void *data) unsigned int idx = 0; drm_for_each_bridge_in_chain_scoped(encoder, bridge) - drm_bridge_debugfs_show_bridge(&p, bridge, idx++, false); + drm_bridge_debugfs_show_bridge_scoped(&p, bridge, idx++, false); return 0; } --- base-commit: d2e20c8951e4bb5f4a828aed39813599980353b6 change-id: 20260312-drm-misc-next-2026-03-05-fix-encoder-bridges-refcount-8f8ee3f58339 Best regards, -- Liu Ying