Skip to content

Commit

Permalink
drm/atomic-helper: remove backoff hack from page_flip
Browse files Browse the repository at this point in the history
Yay, we can now properly retry in case of deadlocks or whatever!

Also don't forget to remove the transitional crtc->acquire_ctx
assignment again.

Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170322215058.8671-13-daniel.vetter@ffwll.ch
  • Loading branch information
Daniel Vetter committed Mar 29, 2017
1 parent 41292b1 commit 043e7fb
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 39 deletions.
40 changes: 2 additions & 38 deletions drivers/gpu/drm/drm_atomic_helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -2884,34 +2884,16 @@ int drm_atomic_helper_page_flip(struct drm_crtc *crtc,
if (!state)
return -ENOMEM;

state->acquire_ctx = drm_modeset_legacy_acquire_ctx(crtc);
state->acquire_ctx = ctx;

retry:
ret = page_flip_common(state, crtc, fb, event, flags);
if (ret != 0)
goto fail;

ret = drm_atomic_nonblocking_commit(state);

fail:
if (ret == -EDEADLK)
goto backoff;

drm_atomic_state_put(state);
return ret;

backoff:
drm_atomic_state_clear(state);
drm_atomic_legacy_backoff(state);

/*
* Someone might have exchanged the framebuffer while we dropped locks
* in the backoff code. We need to fix up the fb refcount tracking the
* core does for us.
*/
plane->old_fb = plane->fb;

goto retry;
}
EXPORT_SYMBOL(drm_atomic_helper_page_flip);

Expand Down Expand Up @@ -2948,9 +2930,8 @@ int drm_atomic_helper_page_flip_target(
if (!state)
return -ENOMEM;

state->acquire_ctx = drm_modeset_legacy_acquire_ctx(crtc);
state->acquire_ctx = ctx;

retry:
ret = page_flip_common(state, crtc, fb, event, flags);
if (ret != 0)
goto fail;
Expand All @@ -2963,26 +2944,9 @@ int drm_atomic_helper_page_flip_target(
crtc_state->target_vblank = target;

ret = drm_atomic_nonblocking_commit(state);

fail:
if (ret == -EDEADLK)
goto backoff;

drm_atomic_state_put(state);
return ret;

backoff:
drm_atomic_state_clear(state);
drm_atomic_legacy_backoff(state);

/*
* Someone might have exchanged the framebuffer while we dropped locks
* in the backoff code. We need to fix up the fb refcount tracking the
* core does for us.
*/
plane->old_fb = plane->fb;

goto retry;
}
EXPORT_SYMBOL(drm_atomic_helper_page_flip_target);

Expand Down
1 change: 0 additions & 1 deletion drivers/gpu/drm/drm_plane.c
Original file line number Diff line number Diff line change
Expand Up @@ -875,7 +875,6 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
ret = drm_modeset_lock(&crtc->cursor->mutex, &ctx);
if (ret)
goto out;
crtc->acquire_ctx = &ctx;

if (crtc->primary->fb == NULL) {
/* The framebuffer is currently unbound, presumably
Expand Down

0 comments on commit 043e7fb

Please sign in to comment.