The bridge returned by drm_bridge_get_prev_bridge() is refcounted. Put it
when done.

select_bus_fmt_recursive() has several return points, and ensuring
drm_bridge_put() is always called in the right place would be error-prone
(especially with future changes to the select_bus_fmt_recursive() code) and
make code uglier. Instead use a scope-based free, which is future-proof and
a lot cleaner.

Signed-off-by: Luca Ceresoli <luca.ceres...@bootlin.com>
---
 drivers/gpu/drm/drm_bridge.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
index 
0b450b334afd82e0460f18fdd248f79d0a2b153d..e33ccc5cabab72505b839d23bfa5ae644d2105c4
 100644
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
@@ -941,11 +941,11 @@ static int select_bus_fmt_recursive(struct drm_bridge 
*first_bridge,
 {
        unsigned int i, num_in_bus_fmts = 0;
        struct drm_bridge_state *cur_state;
-       struct drm_bridge *prev_bridge;
+       struct drm_bridge *prev_bridge __free(drm_bridge_put) =
+               drm_bridge_get_prev_bridge(cur_bridge);
        u32 *in_bus_fmts;
        int ret;
 
-       prev_bridge = drm_bridge_get_prev_bridge(cur_bridge);
        cur_state = drm_atomic_get_new_bridge_state(crtc_state->state,
                                                    cur_bridge);
 

-- 
2.50.0

Reply via email to