From nobody Tue Oct 7 18:25:18 2025 Received: from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net [217.70.183.196]) (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 8B64C221D87 for ; Tue, 8 Jul 2025 15:48:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751989741; cv=none; b=FYYGNxzZ1qLfTw1e44E54g4FK9HPY8MgHeFaqWaRx8bJldniyRDsx8UnnFGVF7JFlDWarkY8TwTnzocZK4wjs/27tMOJA92Dab3LEPEfd/hvxWiQpiUHiONNay2uAtKzFcrkrEzA7wFihOnNsTa9YsPZY3FRfiSLjwacke9V0ew= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751989741; c=relaxed/simple; bh=l1OOh3ft9XolLJoP0NiVy9j3bR4efdCmJAwatwoOQE4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=c4Go50ZIEFS2Wk4UdHo3wZOYi5VuAByjqSoUFotUFTYDwv2ipwMUyRGWLSQiyPAhch0kTPsMGMa8H/ZipTS8Pm18LXBGpH787ZgEjr7I7z2TcFiRpPH/+C1Hze0sOmUQePe7FMHPiEGASB9F40qeSSV7i8nrTtGSLKVe2EdI474= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=lNjA39nY; arc=none smtp.client-ip=217.70.183.196 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="lNjA39nY" Received: by mail.gandi.net (Postfix) with ESMTPSA id 65A7E443E4; Tue, 8 Jul 2025 15:48:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1751989737; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JL11Zrc4Yf6HM8VTZZGd0xEL+GSH49wFuy5GLaIUGiw=; b=lNjA39nYHMR7S8FKlzwj5dK+AEu+NbZJ67iaBykOQRSWnqMFeAWg4cuX/bWB9eYi21uzGg OwKnBFPdh+zYi+3FKxLuzIiu1mxZDdmdg9e0/X/0Uby813JcgOjiFx191yYn2h23wJxJrq lVRFZwJBwSzx+0faNgCIT+kLCWbX4EJUW/yrCgSZpCb6oKmb3nzaq6lW+c82MEWesRah7W M+B1rN/7mNDCqEfyhnI2MGCjj5OruX5UZGUV+r2Xk1ybrss+D1zCMeQ/vivNWjL1AcNS87 +afHDwr/tUxbd7XVdimxiw+84IiJAaHAu9tPvHJ0+hikEit/3hTdkn1ESGG+Lg== From: Luca Ceresoli Date: Tue, 08 Jul 2025 17:48:18 +0200 Subject: [PATCH v9 1/5] drm/bridge: add a cleanup action for scope-based drm_bridge_put() invocation 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: quoted-printable Message-Id: <20250708-drm-bridge-alloc-getput-drm_bridge_chain_get_first_bridge-v9-1-db1ba3df7f58@bootlin.com> References: <20250708-drm-bridge-alloc-getput-drm_bridge_chain_get_first_bridge-v9-0-db1ba3df7f58@bootlin.com> In-Reply-To: <20250708-drm-bridge-alloc-getput-drm_bridge_chain_get_first_bridge-v9-0-db1ba3df7f58@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , David Airlie , Simona Vetter , Marek Vasut , Stefan Agner , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: Liu Ying , Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.14.2 X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdefgdefhedtkecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpefnuhgtrgcuvegvrhgvshholhhiuceolhhutggrrdgtvghrvghsohhlihessghoohhtlhhinhdrtghomheqnecuggftrfgrthhtvghrnhepieeiuedvffetgfeuudelheeutefggfejieettdetteekueeuueeukeevvedvueevnecukfhppeekjedruddvtddrvddukedrvddtjeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeekjedruddvtddrvddukedrvddtjedphhgvlhhopegludelvddrudeikedruddrudefngdpmhgrihhlfhhrohhmpehluhgtrgdrtggvrhgvshholhhisegsohhothhlihhnrdgtohhmpdhnsggprhgtphhtthhopedvhedprhgtphhtthhopehmrggrrhhtvghnrdhlrghnkhhhohhrshhtsehlihhnuhigrdhinhhtvghlrdgtohhmpdhrtghpthhtoheprghirhhlihgvugesghhmrghilhdrtghomhdprhgtphhtthhopegurhhiqdguvghvvghlsehlihhsthhsrdhfrhgvvgguvghskhhtohhprdhorhhgpdhrtghpthhtoheplhhutggrrdgtvghrvghsohhlihessghoohhtlhhinhdrtghomhdprhgtphhtt hhopehmrhhiphgrrhgusehkvghrnhgvlhdrohhrghdprhgtphhtthhopehrfhhoshhssehkvghrnhgvlhdrohhrghdprhgtphhtthhopehjvghrnhgvjhdrshhkrhgrsggvtgesghhmrghilhdrtghomhdprhgtphhtthhopehlihhnuhigqdhkvghrnhgvlhesvhhgvghrrdhkvghrnhgvlhdrohhrgh X-GND-Sasl: luca.ceresoli@bootlin.com Many functions get a drm_bridge pointer, only use it in the function body (or a smaller scope such as a loop body), and don't store it. In these cases they always need to drm_bridge_put() it before returning (or exiting the scope). Some of those functions have complex code paths with multiple return points or loop break/continue. This makes adding drm_bridge_put() in the right places tricky, ugly and error prone in case of future code changes. Others use the bridge pointer in the return statement and would need to split the return line to fit the drm_bridge_put, which is a bit annoying: -return some_thing(bridge); +ret =3D some_thing(bridge); +drm_bridge_put(bridge); +return ret; To make it easier for all of them to put the bridge reference correctly without complicating code, define a scope-based cleanup action to be used with __free(). Reviewed-by: Maxime Ripard Signed-off-by: Luca Ceresoli --- This patch was added in v7. --- include/drm/drm_bridge.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index d2454ba83db36f8f0d475b0b37468c2ebe7e921d..88e7a41c39eb1163bd455003e9c= a40468932d97a 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -23,6 +23,7 @@ #ifndef __DRM_BRIDGE_H__ #define __DRM_BRIDGE_H__ =20 +#include #include #include #include @@ -1227,6 +1228,9 @@ drm_priv_to_bridge(struct drm_private_obj *priv) struct drm_bridge *drm_bridge_get(struct drm_bridge *bridge); void drm_bridge_put(struct drm_bridge *bridge); =20 +/* Cleanup action for use with __free() */ +DEFINE_FREE(drm_bridge_put, struct drm_bridge *, if (_T) drm_bridge_put(_T= )) + void *__devm_drm_bridge_alloc(struct device *dev, size_t size, size_t offs= et, const struct drm_bridge_funcs *funcs); =20 --=20 2.50.0