On Tue, Aug 17, 2021 at 04:26:04PM -0700, José Roberto de Souza wrote: > Cursors don't have a framebuffer so the fb comparisson was always > failing and atomic state was being committed without any plane state. > > So here checking if objects match when checking cursors. This looks extremely backwards ... what exactly is this fixing? If this isn't based on a real world compositor usage but some igt, then I'd say the igt here is very wrong. -Daniel > Fixes: b9fc5e01d1ce ("drm: Add helper to implement legacy dirtyfb") > Cc: Daniel Vetter <daniel.vetter@xxxxxxxxx> > Cc: Rob Clark <robdclark@xxxxxxxxx> > Cc: Deepak Rawat <drawat@xxxxxxxxxx> > Cc: Gwan-gyeong Mun <gwan-gyeong.mun@xxxxxxxxx> > Signed-off-by: José Roberto de Souza <jose.souza@xxxxxxxxx> > --- > drivers/gpu/drm/drm_damage_helper.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/drm_damage_helper.c b/drivers/gpu/drm/drm_damage_helper.c > index 8eeff0c7bdd47..595187d97c131 100644 > --- a/drivers/gpu/drm/drm_damage_helper.c > +++ b/drivers/gpu/drm/drm_damage_helper.c > @@ -157,12 +157,18 @@ int drm_atomic_helper_dirtyfb(struct drm_framebuffer *fb, > retry: > drm_for_each_plane(plane, fb->dev) { > struct drm_plane_state *plane_state; > + bool match; > > ret = drm_modeset_lock(&plane->mutex, state->acquire_ctx); > if (ret) > goto out; > > - if (plane->state->fb != fb) { > + match = plane->state->fb == fb; > + /* Check if objs match to handle dirty buffers of cursors */ > + if (plane->type == DRM_PLANE_TYPE_CURSOR && plane->state->fb) > + match |= fb->obj[0] == plane->state->fb->obj[0]; > + > + if (!match) { > drm_modeset_unlock(&plane->mutex); > continue; > } > -- > 2.32.0 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch