Hi Thomas, On Mon, Feb 22, 2021 at 10:12:49AM +0100, Thomas Zimmermann wrote: > Am 19.02.21 um 13:00 schrieb Maxime Ripard: > > Many drivers reference the plane->state pointer in order to get the > > current plane state in their atomic_check hook, which would be the old > > plane state in the global atomic state since _swap_state hasn't happened > > when atomic_check is run. > > > > Use the drm_atomic_get_old_plane_state helper to get that state to make > > it more obvious. > > > > This was made using the coccinelle script below: > > > > @ plane_atomic_func @ > > identifier helpers; > > identifier func; > > @@ > > > > static struct drm_plane_helper_funcs helpers = { > > ..., > > .atomic_check = func, > > ..., > > }; > > > > @ replaces_old_state @ > > identifier plane_atomic_func.func; > > identifier plane, state, plane_state; > > @@ > > > > func(struct drm_plane *plane, struct drm_atomic_state *state) { > > ... > > - struct drm_plane_state *plane_state = plane->state; > > + struct drm_plane_state *plane_state = drm_atomic_get_old_plane_state(state, plane); > > ... > > } > > > > @@ > > identifier plane_atomic_func.func; > > identifier plane, state, plane_state; > > @@ > > > > func(struct drm_plane *plane, struct drm_atomic_state *state) { > > struct drm_plane_state *plane_state = drm_atomic_get_old_plane_state(state, plane); > > <... > > - plane->state > > + plane_state > > ...> > > } > > > > @ adds_old_state @ > > identifier plane_atomic_func.func; > > identifier plane, state; > > @@ > > > > func(struct drm_plane *plane, struct drm_atomic_state *state) { > > + struct drm_plane_state *old_plane_state = drm_atomic_get_old_plane_state(state, plane); > > <... > > - plane->state > > + old_plane_state > > ...> > > } > > > > @ include depends on adds_old_state || replaces_old_state @ > > @@ > > > > #include <drm/drm_atomic.h> > > > > @ no_include depends on !include && (adds_old_state || replaces_old_state) @ > > @@ > > > > + #include <drm/drm_atomic.h> > > #include <drm/...> > > > > Reviewed-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > Signed-off-by: Maxime Ripard <maxime@xxxxxxxxxx> > > Acked-by: Thomas Zimmermann <tzimmermann@xxxxxxx> > > However, I find 'old plane state' somewhat confusing in this context, > because it's actually the current plane state. Would it make sense to use > drm_atomic_get_existing_plane_state() instead? drm_atomic_get_existing_plane_state is deprecated nowadays, in favour of either drm_atomic_get_old_plane_state or drm_atomic_get_new_plane_state Maxime
Attachment:
signature.asc
Description: PGP signature