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) Signed-off-by: Arun R Murthy <[email protected]> --- drivers/gpu/drm/drm_atomic_uapi.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c index 7320db4b8489f10e24ed772094c77e2172951633..02029b5d7832eeaf4a225096a94947344083fc0b 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -1553,13 +1553,21 @@ int drm_mode_atomic_ioctl(struct drm_device *dev, struct drm_modeset_acquire_ctx ctx; struct drm_out_fence_state *fence_state; int ret = 0; - unsigned int i, j, num_fences; + unsigned int i, j, num_fences = 0; bool async_flip = false; /* disallow for drivers not supporting atomic: */ 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) @@ -1598,13 +1606,6 @@ int drm_mode_atomic_ioctl(struct drm_device *dev, return -EINVAL; } - 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: @@ -1703,7 +1704,8 @@ int drm_mode_atomic_ioctl(struct drm_device *dev, } out: - complete_signaling(dev, state, fence_state, num_fences, !ret); + if (num_fences) + complete_signaling(dev, state, fence_state, num_fences, !ret); if (ret == -EDEADLK) { drm_atomic_state_clear(state); -- 2.25.1
