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@linux.intel.com Signed-off-by: Maxime Ripard maxime@cerno.tech
Acked-by: Thomas Zimmermann tzimmermann@suse.de
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