linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v7 00/11] drm/bridge: add devm_drm_bridge_alloc() with bridge refcount
@ 2025-03-14 10:31 Luca Ceresoli
  2025-03-14 10:31 ` [PATCH v7 01/11] drm/bridge: add devm_drm_bridge_alloc() Luca Ceresoli
                   ` (11 more replies)
  0 siblings, 12 replies; 30+ messages in thread
From: Luca Ceresoli @ 2025-03-14 10:31 UTC (permalink / raw)
  To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, Marek Vasut,
	Stefan Agner, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team,
	Fabio Estevam, Inki Dae, Jagan Teki, Marek Szyprowski
  Cc: Thomas Petazzoni, Anusha Srivatsa, Paul Kocialkowski,
	Dmitry Baryshkov, Hervé Codina, Hui Pu, dri-devel,
	linux-kernel, imx, linux-arm-kernel, Luca Ceresoli

This series improves the way DRM bridges are allocated and initialized and
makes them reference-counted. The goal of reference counting is to avoid
use-after-free by drivers which got a pointer to a bridge and keep it
stored and used even after the bridge has been deallocated.

The overall goal is supporting Linux devices with a DRM pipeline whose
final components can be hot-plugged and hot-unplugged, including one or
more bridges. For more details see the big picture [0].

DRM bridge drivers will have to be adapted to the new API, which is pretty
simple for most cases. Refcounting will have to be adopted on the two
sides: all functions returning a bridge pointer and all code obtaining such
a pointer. This series has just an overview of some of those conversions,
because for now the main goal is to agree on the API.

Series layout:

 1. Add the new API and refcounting:

    drm/bridge: add devm_drm_bridge_alloc()
    drm/bridge: add support for refcounting

 2. get/put the reference in basic operations in the bridge core:

    drm/bridge: get/put the bridge reference in drm_bridge_add/remove()
    drm/bridge: get/put the bridge reference in drm_bridge_attach/detach()

 3. as an example of changes for bridge consumers, get a reference for the
    bridge returned by drm_bridge_chain_get_first_bridge(), have it put by
    all callers (all users will be covered later on separately):

    drm/bridge: add a cleanup action for scope-based drm_bridge_put() invocation
    drm/bridge: get the bridge returned by drm_bridge_chain_get_first_bridge()
    drm/mxsfb: put the bridge returned by drm_bridge_chain_get_first_bridge()
    drm/atomic-helper: put the bridge returned by drm_bridge_chain_get_first_bridge()
    drm/probe-helper: put the bridge returned by drm_bridge_chain_get_first_bridge()

 4. convert a few bridge drivers (bridge providers) to the new API:

    drm/bridge: ti-sn65dsi83: use dynamic lifetime management
    drm/bridge: samsung-dsim: use dynamic lifetime management

This work was formerly a part of my v6 DRM bridge hotplug series[0], now
split as a standalone series with many improvements, hence the "v7" version
number.

[0] https://lore.kernel.org/dri-devel/20250206-hotplug-drm-bridge-v6-0-9d6f2c9c3058@bootlin.com/

Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
Luca Ceresoli (11):
      drm/bridge: add devm_drm_bridge_alloc()
      drm/bridge: add support for refcounting
      drm/bridge: get/put the bridge reference in drm_bridge_add/remove()
      drm/bridge: get/put the bridge reference in drm_bridge_attach/detach()
      drm/bridge: add a cleanup action for scope-based drm_bridge_put() invocation
      drm/bridge: get the bridge returned by drm_bridge_chain_get_first_bridge()
      drm/mxsfb: put the bridge returned by drm_bridge_chain_get_first_bridge()
      drm/atomic-helper: put the bridge returned by drm_bridge_chain_get_first_bridge()
      drm/probe-helper: put the bridge returned by drm_bridge_chain_get_first_bridge()
      drm/bridge: ti-sn65dsi83: use dynamic lifetime management
      drm/bridge: samsung-dsim: use dynamic lifetime management

 drivers/gpu/drm/bridge/samsung-dsim.c |   7 +-
 drivers/gpu/drm/bridge/ti-sn65dsi83.c |   7 +-
 drivers/gpu/drm/drm_atomic_helper.c   |   5 ++
 drivers/gpu/drm/drm_bridge.c          |  74 +++++++++++++++++++--
 drivers/gpu/drm/drm_probe_helper.c    |   1 +
 drivers/gpu/drm/mxsfb/lcdif_kms.c     |   3 +-
 include/drm/drm_bridge.h              | 119 +++++++++++++++++++++++++++++++++-
 7 files changed, 201 insertions(+), 15 deletions(-)
---
base-commit: 9e6d91c60b0d64a4f945663993b3bbf4f3fb7392
change-id: 20250314-drm-bridge-refcount-58d9503503f6

Best regards,
-- 
Luca Ceresoli <luca.ceresoli@bootlin.com>



^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2025-03-20  7:47 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-14 10:31 [PATCH v7 00/11] drm/bridge: add devm_drm_bridge_alloc() with bridge refcount Luca Ceresoli
2025-03-14 10:31 ` [PATCH v7 01/11] drm/bridge: add devm_drm_bridge_alloc() Luca Ceresoli
2025-03-14 17:58   ` Maxime Ripard
2025-03-14 10:31 ` [PATCH v7 02/11] drm/bridge: add support for refcounting Luca Ceresoli
2025-03-14 18:04   ` Maxime Ripard
2025-03-17 14:56     ` Luca Ceresoli
2025-03-14 10:31 ` [PATCH v7 03/11] drm/bridge: get/put the bridge reference in drm_bridge_add/remove() Luca Ceresoli
2025-03-14 18:04   ` Maxime Ripard
2025-03-14 10:31 ` [PATCH v7 04/11] drm/bridge: get/put the bridge reference in drm_bridge_attach/detach() Luca Ceresoli
2025-03-14 18:05   ` Maxime Ripard
2025-03-14 10:31 ` [PATCH v7 05/11] drm/bridge: add a cleanup action for scope-based drm_bridge_put() invocation Luca Ceresoli
2025-03-14 18:08   ` Maxime Ripard
2025-03-17 14:57     ` Luca Ceresoli
2025-03-14 10:31 ` [PATCH v7 06/11] drm/bridge: get the bridge returned by drm_bridge_chain_get_first_bridge() Luca Ceresoli
2025-03-14 18:10   ` Maxime Ripard
2025-03-17 14:57     ` Luca Ceresoli
2025-03-14 10:31 ` [PATCH v7 07/11] drm/mxsfb: put " Luca Ceresoli
2025-03-14 18:11   ` Maxime Ripard
2025-03-14 10:31 ` [PATCH v7 08/11] drm/atomic-helper: " Luca Ceresoli
2025-03-14 18:12   ` Maxime Ripard
2025-03-14 10:31 ` [PATCH v7 09/11] drm/probe-helper: " Luca Ceresoli
2025-03-14 18:12   ` Maxime Ripard
2025-03-14 10:31 ` [PATCH v7 10/11] drm/bridge: ti-sn65dsi83: use dynamic lifetime management Luca Ceresoli
2025-03-14 18:17   ` Maxime Ripard
2025-03-14 10:31 ` [PATCH v7 11/11] drm/bridge: samsung-dsim: " Luca Ceresoli
2025-03-14 18:18   ` Maxime Ripard
2025-03-14 18:21 ` [PATCH v7 00/11] drm/bridge: add devm_drm_bridge_alloc() with bridge refcount Maxime Ripard
2025-03-17 14:56   ` Luca Ceresoli
2025-03-19 16:16     ` Maxime Ripard
2025-03-20  7:41       ` Luca Ceresoli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).