[PATCHv3 20/23] drm/bridge: tc358767: copy the mode data, instead of storing the pointer
Andrzej Hajda
a.hajda at samsung.com
Tue May 21 06:14:44 UTC 2019
On 03.05.2019 14:29, Tomi Valkeinen wrote:
> In tc_bridge_mode_set callback, we store the pointer to the given
> drm_display_mode, and use the mode later. Storing a pointer in such a
> way looks very suspicious to me, and I have observed odd issues where
> the timings were apparently (at least mostly) zero.
>
> Do a copy of the drm_display_mode instead to ensure we don't refer to
> freed/modified data.
>
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ti.com>
Reviewed-by: Andrzej Hajda <a.hajda at samsung.com>
--
Regards
Andrzej
> ---
> drivers/gpu/drm/bridge/tc358767.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c
> index 591bf64ac916..8f6d601def3f 100644
> --- a/drivers/gpu/drm/bridge/tc358767.c
> +++ b/drivers/gpu/drm/bridge/tc358767.c
> @@ -205,7 +205,7 @@ struct tc_data {
> /* display edid */
> struct edid *edid;
> /* current mode */
> - const struct drm_display_mode *mode;
> + struct drm_display_mode mode;
>
> u32 rev;
> u8 assr;
> @@ -1032,12 +1032,12 @@ static int tc_stream_enable(struct tc_data *tc)
> /* PXL PLL setup */
> if (tc_test_pattern) {
> ret = tc_pxl_pll_en(tc, clk_get_rate(tc->refclk),
> - 1000 * tc->mode->clock);
> + 1000 * tc->mode.clock);
> if (ret)
> goto err;
> }
>
> - ret = tc_set_video_mode(tc, tc->mode);
> + ret = tc_set_video_mode(tc, &tc->mode);
> if (ret)
> return ret;
>
> @@ -1180,7 +1180,7 @@ static void tc_bridge_mode_set(struct drm_bridge *bridge,
> {
> struct tc_data *tc = bridge_to_tc(bridge);
>
> - tc->mode = mode;
> + tc->mode = *mode;
> }
>
> static int tc_connector_get_modes(struct drm_connector *connector)
More information about the dri-devel
mailing list