]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
drm/bridge: prevent encoder chain changes in pre_enable/post_disable
authorLuca Ceresoli <luca.ceresoli@bootlin.com>
Tue, 24 Mar 2026 08:58:14 +0000 (09:58 +0100)
committerLuca Ceresoli <luca.ceresoli@bootlin.com>
Thu, 16 Apr 2026 07:08:42 +0000 (09:08 +0200)
commit901ed976068fb34d605cbdec41f58cecba4d520a
treef91cd3138117bc57ebb00a4e2a6ee5f2e6d94363
parent82ce979b9be52fdc533c9e9aed965216e088200a
drm/bridge: prevent encoder chain changes in pre_enable/post_disable

Take the encoder chain mutex while iterating over the encoder chain in
drm_atomic_bridge_chain_pre_enable() and
drm_atomic_bridge_chain_post_disable() to ensure the lists won't change
while being inspected.

These functions have nested list_for_each_*() loops, which makes them
complicated. list_for_each_entry_from() loops could be replaced by
drm_for_each_bridge_in_chain_from(), but it would not work in a nested way
in its current implementation. Besides, there is no "_reverse" variant of
drm_for_each_bridge_in_chain_from().

Keep code simple and readable by explicitly locking around the outer
loop. Thankfully there are no break or return points inside the loops, so
the change is trivial and readable.

Reviewed-by: Maxime Ripard <mripard@kernel.org>
Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Link: https://patch.msgid.link/20260324-drm-bridge-alloc-encoder-chain-mutex-v5-7-8bf786c5c7e6@bootlin.com
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
drivers/gpu/drm/drm_bridge.c