]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/atomic-helper: put the bridge returned by drm_bridge_chain_get_first_bridge()
authorLuca Ceresoli <luca.ceresoli@bootlin.com>
Tue, 8 Jul 2025 15:48:21 +0000 (17:48 +0200)
committerLuca Ceresoli <luca.ceresoli@bootlin.com>
Tue, 22 Jul 2025 11:01:28 +0000 (13:01 +0200)
The bridge returned by drm_bridge_chain_get_first_bridge() is
refcounted. Put it when done.

Reviewed-by: Maxime Ripard <mripard@kernel.org>
Link: https://lore.kernel.org/r/20250708-drm-bridge-alloc-getput-drm_bridge_chain_get_first_bridge-v9-4-db1ba3df7f58@bootlin.com
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
drivers/gpu/drm/drm_atomic_helper.c

index ef56b474acf599bb9cd341674dc83b04ae247eb7..d5ebe6ea0acbc5a08aef7fa41ecb9ed5d8fa8e80 100644 (file)
@@ -456,6 +456,7 @@ mode_fixup(struct drm_atomic_state *state)
                ret = drm_atomic_bridge_chain_check(bridge,
                                                    new_crtc_state,
                                                    new_conn_state);
+               drm_bridge_put(bridge);
                if (ret) {
                        drm_dbg_atomic(encoder->dev, "Bridge atomic check failed\n");
                        return ret;
@@ -527,6 +528,7 @@ static enum drm_mode_status mode_valid_path(struct drm_connector *connector,
        bridge = drm_bridge_chain_get_first_bridge(encoder);
        ret = drm_bridge_chain_mode_valid(bridge, &connector->display_info,
                                          mode);
+       drm_bridge_put(bridge);
        if (ret != MODE_OK) {
                drm_dbg_atomic(encoder->dev, "[BRIDGE] mode_valid() failed\n");
                return ret;
@@ -1212,6 +1214,7 @@ encoder_bridge_disable(struct drm_device *dev, struct drm_atomic_state *state)
                 */
                bridge = drm_bridge_chain_get_first_bridge(encoder);
                drm_atomic_bridge_chain_disable(bridge, state);
+               drm_bridge_put(bridge);
 
                /* Right function depends upon target state. */
                if (funcs) {
@@ -1329,6 +1332,7 @@ encoder_bridge_post_disable(struct drm_device *dev, struct drm_atomic_state *sta
                 */
                bridge = drm_bridge_chain_get_first_bridge(encoder);
                drm_atomic_bridge_chain_post_disable(bridge, state);
+               drm_bridge_put(bridge);
        }
 }
 
@@ -1501,6 +1505,7 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *state)
 
                bridge = drm_bridge_chain_get_first_bridge(encoder);
                drm_bridge_chain_mode_set(bridge, mode, adjusted_mode);
+               drm_bridge_put(bridge);
        }
 }
 
@@ -1580,6 +1585,7 @@ encoder_bridge_pre_enable(struct drm_device *dev, struct drm_atomic_state *state
                 */
                bridge = drm_bridge_chain_get_first_bridge(encoder);
                drm_atomic_bridge_chain_pre_enable(bridge, state);
+               drm_bridge_put(bridge);
        }
 }
 
@@ -1655,6 +1661,7 @@ encoder_bridge_enable(struct drm_device *dev, struct drm_atomic_state *state)
                }
 
                drm_atomic_bridge_chain_enable(bridge, state);
+               drm_bridge_put(bridge);
        }
 }