[PATCH 0/2] drm/bridge: handle gracefully atomic updates during bridge removal

Luca Ceresoli
2025-08-08T13:53:00Z

This is a first attempt at gracefully handling the case of atomic updates
happening concurrently to physical removal of DRM bridges.

This is part of the work towards removal of bridges from a still existing
DRM pipeline without use-after-free. The grand plan was discussed in [1].
Here's the work breakdown (➜ marks the current series):

1. ➜ add refcounting to DRM bridges (struct drm_bridge)
(based on devm_drm_bridge_alloc() [0])
A. ✔ add new alloc API and refcounting (in v6.16-rc1)
B. ✔ convert all bridge drivers to new API (now in drm-misc-next)
C. ✔ kunit tests (now in drm-misc-next)
D. ✔ add get/put to drm_bridge_add/remove() + attach/detach()
and warn on old allocation pattern (now in drm-misc-next)
E. ➜ add get/put on drm_bridge accessors
1. ✔ drm_bridge_chain_get_first_bridge() + add a cleanup action
2. ✔ drm_bridge_get_prev_bridge()
3. … drm_bridge_get_next_bridge()
4. … drm_for_each_bridge_in_chain()
5. drm_bridge_connector_init
6. of_drm_find_bridge
7. drm_of_find_panel_or_bridge, *_of_get_bridge
F. debugfs improvements
2. ➜ handle gracefully atomic updates during bridge removal
3. … DSI host-device driver interaction
4. finish the hotplug bridge work, removing the "always-disconnected"
connector, moving code to the core and potentially removing the
hotplug-bridge itself (this needs to be clarified as points 1-3 are
developed)

The idea was proposed by Maxime [0] and is based on the existing
drm_dev_enter/exit() already existing for the DRM device.

This small series implements the core mechanism in drm_bridge.c and uses it
in the ti-sn65dsi83 driver. This prevents usage of device resources by
various code paths that can happen concurrently to unplug of the SN65DSI8x
bridge.

[0] https://lore.kernel.org/all/20250106-vigorous-talented-viper-fa49d9@houat/

Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
Luca Ceresoli (2):
drm/bridge: add drm_bridge_unplug() and drm_bridge_enter/exit()
drm/bridge: ti-sn65dsi83: protect device resources on unplug

drivers/gpu/drm/bridge/ti-sn65dsi83.c | 53 ++++++++++++++++++++++++++++++++
drivers/gpu/drm/drm_bridge.c | 58 +++++++++++++++++++++++++++++++++++
include/drm/drm_bridge.h | 12 ++++++++
3 files changed, 123 insertions(+)
---
base-commit: d2b48f2b30f25997a1ae1ad0cefac68c25f8c330
change-id: 20250808-drm-bridge-atomic-vs-remove-1d7bb202c8ef

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