linux/drivers/gpu/drm/renesas/rcar-du
Albert Esteve b71a623598 drm/panel: of_drm_find_panel() return a counted reference
Callers of of_drm_find_panel() and drm_of_find_panel_or_bridge()
receive a pointer with no reference held, creating a window where
the panel device can be unregistered and freed between the lookup
and first use (e.g., drm_panel_prepare()).

Fix the lookup function by acquiring a reference with drm_panel_get()
before returning, under panel_lock. Callers are now responsible for
calling drm_panel_put() when they no longer need the pointer.

For bridge drivers that immediately wrap the panel in a panel_bridge
(which acquires its own reference), release the lookup reference right
after the bridge creation call.

For analogix-anx6345, which stores the panel for direct use, release
the reference in the i2c remove path.

For platform drivers using analogix_dp_core with a component lifecycle
(exynos_dp, rockchip analogix_dp), release the lookup reference in the
platform remove() function. The panel_bridge created during bind() holds
a separate reference that devm cleanup releases after remove() returns.

Also fix devm_drm_of_get_bridge() and drmm_of_get_bridge() in
bridge/panel.c itself, update a second batch of drivers calling
of_drm_find_panel() or drm_of_find_panel_or_bridge() to release the
lookup reference after wrapping the panel in a bridge, and handle the
cases where a panel is found but cannot be used, dropping the reference
immediately in those paths.

Assisted-by: Claude:claude-opus-4-6
Acked-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Albert Esteve <aesteve@redhat.com>
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://patch.msgid.link/20260717-drm_refcount_wiring-v3-3-023900c32e01@redhat.com
2026-07-20 15:07:22 +02:00
..
Kconfig drm/renesas/rcar-du: Run DRM default client setup 2024-09-26 08:28:10 +02:00
Makefile
rcar_cmm.c drm: rcar-du: Store CMM device pointer instead of platform_device 2026-03-26 15:16:24 +02:00
rcar_cmm.h drm: rcar-du: Store CMM device pointer instead of platform_device 2026-03-26 15:16:24 +02:00
rcar_du_crtc.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
rcar_du_crtc.h drm: rcar-du: Don't leak device_link to CMM 2026-03-26 15:16:25 +02:00
rcar_du_drv.c drm/rcar-du: Drop superfluous spaces after assignments 2026-06-11 14:56:01 +03:00
rcar_du_drv.h drm: rcar-du: Don't leak device_link to CMM 2026-03-26 15:16:25 +02:00
rcar_du_encoder.c drm/panel: of_drm_find_panel() return a counted reference 2026-07-20 15:07:22 +02:00
rcar_du_encoder.h drm: rcar-du: encoder: convert to of_drm_find_and_get_bridge() 2026-04-16 10:14:43 +02:00
rcar_du_group.c drm/rcar-du: Add support for r8a779h0 2024-12-17 15:13:04 +02:00
rcar_du_group.h
rcar_du_kms.c drm-misc-next for v7.1-rc1: 2026-05-06 10:12:25 +10:00
rcar_du_kms.h
rcar_du_plane.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
rcar_du_plane.h drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
rcar_du_regs.h
rcar_du_vsp.c [GIT PULL for v7.2] media updates 2026-06-18 17:21:54 -07:00
rcar_du_vsp.h drm: rcar-du: Ensure correct suspend/resume ordering with VSP 2026-03-26 15:16:24 +02:00
rcar_du_writeback.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
rcar_du_writeback.h
rcar_dw_hdmi.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
rcar_lvds_regs.h
rcar_lvds.c drm/panel: of_drm_find_panel() return a counted reference 2026-07-20 15:07:22 +02:00
rcar_lvds.h
rcar_mipi_dsi_regs.h drm/rcar-du: dsi: Convert register bitfields to GENMASK() macro 2025-10-29 11:32:11 +02:00
rcar_mipi_dsi.c drm/renesas: rcar-du: mipi_dsi: Switch to atomic_create_state 2026-06-22 11:24:50 +02:00
rcar_mipi_dsi.h drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00