All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v9 0/5] drm/bridge: add devm_drm_bridge_alloc() with bridge refcount
@ 2025-03-26 17:47 Luca Ceresoli
  2025-03-26 17:47 ` [PATCH v9 1/5] drm/bridge: add devm_drm_bridge_alloc() Luca Ceresoli
                   ` (5 more replies)
  0 siblings, 6 replies; 9+ messages in thread
From: Luca Ceresoli @ 2025-03-26 17:47 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 -- the change is
trivial for most cases. This series converts two of them to serve as an
example. The remaining ones will be done as a follow-up after this first
part is merged.

After that, refcounting will have to be added on the two sides: all
functions returning a bridge pointer and all code obtaining such a
pointer. A few examples have been sent in v7 (link below), they are OK, but
I removed them since v8 because they must be merged only after converting
all bridges.

Here's the grand plan:

 A. add new alloc API and refcounting (this series, at least patches 1-3)
 B. after (A), convert all bridge drivers to new API
 C. after (A), add documentation and kunit tests
 D. after (B), add get/put to drm_bridge_add/remove() + attach/detech()
    (patches 3-4 in the v7 series)
 E. after (B), convert accessors (including patches 5-9 in the v7 series
    which convert drm_bridge_chain_get_first_bridge() and its users);
    this is a large work and can be done in chunks
 F. after (A), debugfs: show refcount, show removed bridges
 
Layout of this:

 1. Add the new API and refcounting:

    drm/bridge: add devm_drm_bridge_alloc()
    drm/bridge: add support for refcounting
    drm/bridge: deprecate old-style bridge allocation

 2. 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

[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>
---
Changes in v9 (only patches 2 and 3 have changes):
- Made drm_bridge_put() return void
- Added debugfs improvements to the grand plan (item F)
- Reworded comment in patch 3
- Link to v8: https://lore.kernel.org/r/20250320-drm-bridge-refcount-v8-0-b3ddaa9f1368@bootlin.com

Changes in v8:
- Applied requested changes to patch 2
- Add R-by to other patches
- Removed v7 patches 3-9: they are OK but must wait until all bridge
  drivers are converted to the new API
- Added patch to deprecate old-style bridge allocation
- Link to v7: https://lore.kernel.org/r/20250314-drm-bridge-refcount-v7-0-152571f8c694@bootlin.com

---
Luca Ceresoli (5):
      drm/bridge: add devm_drm_bridge_alloc()
      drm/bridge: add support for refcounting
      drm/bridge: make devm_drm_bridge_alloc() mandatory for bridge allocation
      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_bridge.c          | 86 +++++++++++++++++++++++++++++++++++
 include/drm/drm_bridge.h              | 36 +++++++++++++++
 4 files changed, 128 insertions(+), 8 deletions(-)
---
base-commit: 8224bc33fdec82533a68486612e6fd78197b95b5
change-id: 20250314-drm-bridge-refcount-58d9503503f6

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


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

end of thread, other threads:[~2025-04-07  9:50 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-26 17:47 [PATCH v9 0/5] drm/bridge: add devm_drm_bridge_alloc() with bridge refcount Luca Ceresoli
2025-03-26 17:47 ` [PATCH v9 1/5] drm/bridge: add devm_drm_bridge_alloc() Luca Ceresoli
2025-03-26 17:47 ` [PATCH v9 2/5] drm/bridge: add support for refcounting Luca Ceresoli
2025-03-27 13:47   ` Maxime Ripard
2025-03-26 17:47 ` [PATCH v9 3/5] drm/bridge: make devm_drm_bridge_alloc() mandatory for bridge allocation Luca Ceresoli
2025-03-27 13:46   ` Maxime Ripard
2025-03-26 17:47 ` [PATCH v9 4/5] drm/bridge: ti-sn65dsi83: use dynamic lifetime management Luca Ceresoli
2025-03-26 17:47 ` [PATCH v9 5/5] drm/bridge: samsung-dsim: " Luca Ceresoli
2025-04-07  9:50 ` [PATCH v9 0/5] drm/bridge: add devm_drm_bridge_alloc() with bridge refcount Louis Chauvet

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.