--- x/drivers/gpu/drm/drm_client_modeset.c +++ y/drivers/gpu/drm/drm_client_modeset.c @@ -987,6 +987,7 @@ static int drm_client_modeset_commit_ato struct drm_mode_set *mode_set; int ret; +retry: drm_modeset_acquire_init(&ctx, 0); state = drm_atomic_state_alloc(dev); @@ -996,7 +997,6 @@ static int drm_client_modeset_commit_ato } state->acquire_ctx = &ctx; -retry: drm_for_each_plane(plane, dev) { struct drm_plane_state *plane_state; @@ -1051,21 +1051,15 @@ retry: ret = drm_atomic_commit(state); out_state: - if (ret == -EDEADLK) - goto backoff; - drm_atomic_state_put(state); out_ctx: drm_modeset_drop_locks(&ctx); drm_modeset_acquire_fini(&ctx); - return ret; - -backoff: - drm_atomic_state_clear(state); - drm_modeset_backoff(&ctx); + if (ret == -EDEADLK) + goto retry; - goto retry; + return ret; } static int drm_client_modeset_commit_legacy(struct drm_client_dev *client)