On Fri, Mar 25, 2022 at 01:48:19PM +0100, Maxime Ripard wrote: > The DRM_UT_STATE controls whether we're calling > drm_atomic_print_new_state() whenever a new state is committed. However, > that call is made in the drm_mode_atomic_ioctl(), whereas we have > multiple users of the drm_atomic_commit() function in the kernel > (framebuffer emulation, drm_atomic_helper_dirtyfb, etc.). Similarly, > it's only called for a blocking atomic commit. > > This leads to multiple states being committed but never actually > displayed even though we asked to have verbose atomic state debugging. > > Let's move the call to drm_atomic_print_new_state() to > drm_atomic_commit() to make sure we don't miss any. Commit message doesn't match the patch anymore. > Signed-off-by: Maxime Ripard <maxime@xxxxxxxxxx> > --- > drivers/gpu/drm/drm_atomic.c | 4 ++++ > drivers/gpu/drm/drm_atomic_uapi.c | 4 ---- > 2 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c > index 88cd992df356..73865c147b4b 100644 > --- a/drivers/gpu/drm/drm_atomic.c > +++ b/drivers/gpu/drm/drm_atomic.c > @@ -1423,6 +1423,7 @@ EXPORT_SYMBOL(drm_atomic_check_only); > int drm_atomic_commit(struct drm_atomic_state *state) > { > struct drm_mode_config *config = &state->dev->mode_config; > + struct drm_printer p = drm_info_printer(state->dev->dev); > int ret; > > ret = drm_atomic_check_only(state); > @@ -1431,6 +1432,9 @@ int drm_atomic_commit(struct drm_atomic_state *state) > > drm_dbg_atomic(state->dev, "committing %p\n", state); > > + if (drm_debug_enabled(DRM_UT_STATE)) > + drm_atomic_print_new_state(state, &p); Just realized that this changes things now, you no longer print the state when it fails the atomic check. Not sure we want that behaviour change ... -Daniel > + > return config->funcs->atomic_commit(state->dev, state, false); > } > EXPORT_SYMBOL(drm_atomic_commit); > diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c > index 9781722519c3..45e6d3c62a9a 100644 > --- a/drivers/gpu/drm/drm_atomic_uapi.c > +++ b/drivers/gpu/drm/drm_atomic_uapi.c > @@ -1326,7 +1326,6 @@ int drm_mode_atomic_ioctl(struct drm_device *dev, > struct drm_out_fence_state *fence_state; > int ret = 0; > unsigned int i, j, num_fences; > - struct drm_printer p = drm_info_printer(dev->dev); > > /* disallow for drivers not supporting atomic: */ > if (!drm_core_check_feature(dev, DRIVER_ATOMIC)) > @@ -1458,9 +1457,6 @@ int drm_mode_atomic_ioctl(struct drm_device *dev, > } else if (arg->flags & DRM_MODE_ATOMIC_NONBLOCK) { > ret = drm_atomic_nonblocking_commit(state); > } else { > - if (drm_debug_enabled(DRM_UT_STATE)) > - drm_atomic_print_new_state(state, &p); > - > ret = drm_atomic_commit(state); > } > > -- > 2.35.1 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch