lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <Z4p4DYBtC0_f6n0a@phenom.ffwll.local>
Date: Fri, 17 Jan 2025 16:32:29 +0100
From: Simona Vetter <simona.vetter@...ll.ch>
To: Maxime Ripard <mripard@...nel.org>
Cc: Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
	Thomas Zimmermann <tzimmermann@...e.de>,
	David Airlie <airlied@...il.com>, Simona Vetter <simona@...ll.ch>,
	Andrzej Hajda <andrzej.hajda@...el.com>,
	Neil Armstrong <neil.armstrong@...aro.org>,
	Robert Foss <rfoss@...nel.org>,
	Laurent Pinchart <Laurent.pinchart@...asonboard.com>,
	Jonas Karlman <jonas@...boo.se>,
	Jernej Skrabec <jernej.skrabec@...il.com>,
	Douglas Anderson <dianders@...omium.org>,
	dri-devel@...ts.freedesktop.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 22/29] drm/bridge: Rename atomic hooks parameters to drop
 old prefix

On Fri, Jan 17, 2025 at 03:50:09PM +0100, Maxime Ripard wrote:
> On Thu, Jan 16, 2025 at 12:34:12PM +0100, Simona Vetter wrote:
> > On Wed, Jan 15, 2025 at 10:05:29PM +0100, Maxime Ripard wrote:
> > > All the bridge atomic hooks were using the old_bridge_state name for
> > > their drm_bridge_state parameter. However, this state is the current
> > > state being committed for all of them, which ends up being confusing.
> > > 
> > > Let's rename it to bridge_state for all of them.
> > > 
> > > Signed-off-by: Maxime Ripard <mripard@...nel.org>
> > > ---
> > >  include/drm/drm_bridge.h | 8 ++++----
> > >  1 file changed, 4 insertions(+), 4 deletions(-)
> > > 
> > > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
> > > index 4b84faf14e368310dd20aa964e8178ec80aa6fa7..8e18130be8bb85fc2463917dde9bf1d281934184 100644
> > > --- a/include/drm/drm_bridge.h
> > > +++ b/include/drm/drm_bridge.h
> > > @@ -303,11 +303,11 @@ struct drm_bridge_funcs {
> > >  	 * there is one) when this callback is called.
> > >  	 *
> > >  	 * The @atomic_pre_enable callback is optional.
> > >  	 */
> > >  	void (*atomic_pre_enable)(struct drm_bridge *bridge,
> > > -				  struct drm_bridge_state *old_bridge_state);
> > > +				  struct drm_bridge_state *bridge_state);
> > >  
> > >  	/**
> > >  	 * @atomic_enable:
> > >  	 *
> > >  	 * This callback should enable the bridge. It is called right after
> > > @@ -323,11 +323,11 @@ struct drm_bridge_funcs {
> > >  	 * chain if there is one.
> > >  	 *
> > >  	 * The @atomic_enable callback is optional.
> > >  	 */
> > >  	void (*atomic_enable)(struct drm_bridge *bridge,
> > > -			      struct drm_bridge_state *old_bridge_state);
> > > +			      struct drm_bridge_state *bridge_state);
> > 
> > Checked this one, and it very clearly passes the old state.
> 
> Urgh, you're right
> 
> > Because the new state you can get by looking at bridge->state.
> 
> Bridge->state doesn't exist though.

Yeah it's defacto your helper to go find the private object, deref the
->state pointer in there and then cast to the right type. But that again
has a bit the locking issue since sometimes you must hold the modeset
lock, sometimes not.

If we instead always go through the drm_atomic_state lookup then we can
require the modeset lock in the other helper for the bridge ->
bridge_state lookup, and things become much harder for drivers to get
wrong.

> > So this looks very wrong.
> > 
> > If you want to fully update the pattern, pass the drm_atomic_state
> > instead, and let callbacks lookup any additional states they use as
> > needed.
> 
> Yeah, that's probably the best option. I think I still have the
> coccinelle scripts I used for the others somewhere.

Yeah cocci would help here.
-Sima
-- 
Simona Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ