int drm_atomic_helper_resume(struct drm_device *dev,
                             struct drm_atomic_state *state)
 {
-       struct drm_mode_config *config = &dev->mode_config;
+       struct drm_modeset_acquire_ctx ctx;
        int err;
 
        drm_mode_config_reset(dev);
 
-       drm_modeset_lock_all(dev);
-       err = drm_atomic_helper_commit_duplicated_state(state, config->acquire_ctx);
-       drm_modeset_unlock_all(dev);
+       drm_modeset_acquire_init(&ctx, 0);
+       while (1) {
+               err = drm_atomic_helper_commit_duplicated_state(state, &ctx);
+               if (err != -EDEADLK)
+                       break;
+
+               drm_modeset_backoff(&ctx);
+       }
+
+       drm_modeset_drop_locks(&ctx);
+       drm_modeset_acquire_fini(&ctx);
 
        return err;
 }