Hi Maxime,

On Tue, Sep 02, 2025 at 10:32:33AM +0200, Maxime Ripard wrote:
> Bridges implement their state using a drm_private_obj and an

s/and an/and a/

> hand-crafted reset implementation.
> 
> Since drm_private_obj doesn't have a set of reset helper like the other
> states, __drm_atomic_helper_bridge_reset() was initializing both the

s/was initializing/initializes/

> drm_private_state and the drm_bridge_state structures.
> 
> This initialization however was missing the drm_private_state.obj

s/was missing/is missing/

Or do I incorrectly think that the commit message should describe the
current situation in the present tense ?

> pointer to the drm_private_obj the state was allocated for, creating a
> NULL pointer dereference when trying to access it.
> 
> Fixes: 751465913f04 ("drm/bridge: Add a drm_bridge_state object")
> Signed-off-by: Maxime Ripard <mrip...@kernel.org>
> ---
>  drivers/gpu/drm/drm_atomic_state_helper.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c 
> b/drivers/gpu/drm/drm_atomic_state_helper.c
> index 
> 7142e163e618ea0d7d9d828e1bd9ff2a6ec0dfeb..b962c342b16aabf4e3bea52a914e5deb1c2080ce
>  100644
> --- a/drivers/gpu/drm/drm_atomic_state_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_state_helper.c
> @@ -707,10 +707,17 @@ void drm_atomic_helper_connector_destroy_state(struct 
> drm_connector *connector,
>       __drm_atomic_helper_connector_destroy_state(state);
>       kfree(state);
>  }
>  EXPORT_SYMBOL(drm_atomic_helper_connector_destroy_state);
>  
> +static void __drm_atomic_helper_private_obj_reset(struct drm_private_obj 
> *obj,
> +                                               struct drm_private_state 
> *state)
> +{
> +     memset(state, 0, sizeof(*state));

As Thomas mentioned, the memset is likely not needed.

Reviewed-by: Laurent Pinchart <laurent.pinchart+rene...@ideasonboard.com>

> +     state->obj = obj;
> +}
> +
>  /**
>   * __drm_atomic_helper_private_obj_duplicate_state - copy atomic private 
> state
>   * @obj: CRTC object
>   * @state: new private object state
>   *
> @@ -796,10 +803,11 @@ EXPORT_SYMBOL(drm_atomic_helper_bridge_destroy_state);
>   */
>  void __drm_atomic_helper_bridge_reset(struct drm_bridge *bridge,
>                                     struct drm_bridge_state *state)
>  {
>       memset(state, 0, sizeof(*state));
> +     __drm_atomic_helper_private_obj_reset(&bridge->base, &state->base);
>       state->bridge = bridge;
>  }
>  EXPORT_SYMBOL(__drm_atomic_helper_bridge_reset);
>  
>  /**
> 

-- 
Regards,

Laurent Pinchart

Reply via email to