> Subject: [PATCH v9 3/7] drm/atomic: Allocate atomic_state at the beginning of > atomic_ioctl > > Move atomic_state allocation to the beginning of the atomic_ioctl to > accommodate drm_mode_atomic_err_code usage for returning error code on > failures. > As atomic state is required for drm_mode_atomic_err_code to store the error > codes. > > v7: Reframe commit message (Suraj) > v8: Moved the clearing fence change to a different patch (Suraj/Louis) > v9: Free allocated atomic_state before return on error, move this change from > patch 5 (Suraj) > > Signed-off-by: Arun R Murthy <[email protected]> > --- > drivers/gpu/drm/drm_atomic_uapi.c | 30 ++++++++++++++++++------------ > 1 file changed, 18 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/drm_atomic_uapi.c > b/drivers/gpu/drm/drm_atomic_uapi.c > index > dc013a22bf265512a4fa1edf0ae90931ff0d35e6..c228c9aed75acdb09a80df5dad5 > 4440a5c182254 100644 > --- a/drivers/gpu/drm/drm_atomic_uapi.c > +++ b/drivers/gpu/drm/drm_atomic_uapi.c > @@ -1576,6 +1576,14 @@ int drm_mode_atomic_ioctl(struct drm_device > *dev, > if (!drm_core_check_feature(dev, DRIVER_ATOMIC)) > return -EOPNOTSUPP; > > + state = drm_atomic_state_alloc(dev); > + if (!state) > + return -ENOMEM; > + > + drm_modeset_acquire_init(&ctx, > DRM_MODESET_ACQUIRE_INTERRUPTIBLE); > + state->acquire_ctx = &ctx; > + state->allow_modeset = !!(arg->flags & > DRM_MODE_ATOMIC_ALLOW_MODESET); > + > /* disallow for userspace that has not enabled atomic cap (even > * though this may be a bit overkill, since legacy userspace > * wouldn't know how to call this ioctl) @@ -1583,24 +1591,28 @@ int > drm_mode_atomic_ioctl(struct drm_device *dev, > if (!file_priv->atomic) { > drm_dbg_atomic(dev, > "commit failed: atomic cap not enabled\n"); > - return -EINVAL; > + ret = -EINVAL; > + goto out; > } > > if (arg->flags & ~DRM_MODE_ATOMIC_FLAGS) { > drm_dbg_atomic(dev, "commit failed: invalid flag\n"); > - return -EINVAL; > + ret = -EINVAL; > + goto out; > } > > if (arg->reserved) { > drm_dbg_atomic(dev, "commit failed: reserved field set\n"); > - return -EINVAL; > + ret = -EINVAL; > + goto out; > } > > if (arg->flags & DRM_MODE_PAGE_FLIP_ASYNC) { > if (!dev->mode_config.async_page_flip) { > drm_dbg_atomic(dev, > "commit failed: > DRM_MODE_PAGE_FLIP_ASYNC not supported\n"); > - return -EINVAL; > + ret = -EINVAL; > + goto out; > } > > async_flip = true; > @@ -1611,16 +1623,10 @@ int drm_mode_atomic_ioctl(struct drm_device > *dev, > (arg->flags & DRM_MODE_PAGE_FLIP_EVENT)) { > drm_dbg_atomic(dev, > "commit failed: page-flip event requested with > test-only commit\n"); > - return -EINVAL; > + ret = -EINVAL; > + goto out; > } > > - state = drm_atomic_state_alloc(dev); > - if (!state) > - return -ENOMEM; > - > - drm_modeset_acquire_init(&ctx, > DRM_MODESET_ACQUIRE_INTERRUPTIBLE); > - state->acquire_ctx = &ctx; > - state->allow_modeset = !!(arg->flags & > DRM_MODE_ATOMIC_ALLOW_MODESET); > state->plane_color_pipeline = file_priv->plane_color_pipeline; > > retry:
Here you seem to miss taking care of complete signaling which you take care in 4th patch maybe you can exchange the order so that we don’t break bisectability With that done Reviewed-by: Suraj Kandpal <[email protected]> > > -- > 2.25.1
