Commit 9073d4ed authored by Daniel Vetter's avatar Daniel Vetter

drm/atomic: debug output for EBUSY

Hopefully we'll have the drm crash recorder RSN, but meanwhile
compositors would like to know a bit better why they get an EBUSY.

v2: Move misplaced hunk to the right patch (Pekka)
Acked-by: default avatarPekka Paalanen <pekka.paalanen@collabora.com>
Reviewed-by: default avatarDaniel Stone <daniels@collabora.com>
Cc: Sean Paul <seanpaul@chromium.org>
Cc: Daniel Stone <daniel@fooishbar.org>
Cc: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Cc: Simon Ser <contact@emersion.fr>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200925084651.3250104-2-daniel.vetter@ffwll.ch
parent fb6473a4
...@@ -1736,8 +1736,11 @@ int drm_atomic_helper_async_check(struct drm_device *dev, ...@@ -1736,8 +1736,11 @@ int drm_atomic_helper_async_check(struct drm_device *dev,
* overridden by a previous synchronous update's state. * overridden by a previous synchronous update's state.
*/ */
if (old_plane_state->commit && if (old_plane_state->commit &&
!try_wait_for_completion(&old_plane_state->commit->hw_done)) !try_wait_for_completion(&old_plane_state->commit->hw_done)) {
DRM_DEBUG_ATOMIC("[PLANE:%d:%s] inflight previous commit preventing async commit\n",
plane->base.id, plane->name);
return -EBUSY; return -EBUSY;
}
return funcs->atomic_async_check(plane, new_plane_state); return funcs->atomic_async_check(plane, new_plane_state);
} }
...@@ -1955,6 +1958,9 @@ static int stall_checks(struct drm_crtc *crtc, bool nonblock) ...@@ -1955,6 +1958,9 @@ static int stall_checks(struct drm_crtc *crtc, bool nonblock)
* commit with nonblocking ones. */ * commit with nonblocking ones. */
if (!completed && nonblock) { if (!completed && nonblock) {
spin_unlock(&crtc->commit_lock); spin_unlock(&crtc->commit_lock);
DRM_DEBUG_ATOMIC("[CRTC:%d:%s] busy with a previous commit\n",
crtc->base.id, crtc->name);
return -EBUSY; return -EBUSY;
} }
} else if (i == 1) { } else if (i == 1) {
...@@ -2129,8 +2135,12 @@ int drm_atomic_helper_setup_commit(struct drm_atomic_state *state, ...@@ -2129,8 +2135,12 @@ int drm_atomic_helper_setup_commit(struct drm_atomic_state *state,
/* Userspace is not allowed to get ahead of the previous /* Userspace is not allowed to get ahead of the previous
* commit with nonblocking ones. */ * commit with nonblocking ones. */
if (nonblock && old_conn_state->commit && if (nonblock && old_conn_state->commit &&
!try_wait_for_completion(&old_conn_state->commit->flip_done)) !try_wait_for_completion(&old_conn_state->commit->flip_done)) {
DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] busy with a previous commit\n",
conn->base.id, conn->name);
return -EBUSY; return -EBUSY;
}
/* Always track connectors explicitly for e.g. link retraining. */ /* Always track connectors explicitly for e.g. link retraining. */
commit = crtc_or_fake_commit(state, new_conn_state->crtc ?: old_conn_state->crtc); commit = crtc_or_fake_commit(state, new_conn_state->crtc ?: old_conn_state->crtc);
...@@ -2144,8 +2154,12 @@ int drm_atomic_helper_setup_commit(struct drm_atomic_state *state, ...@@ -2144,8 +2154,12 @@ int drm_atomic_helper_setup_commit(struct drm_atomic_state *state,
/* Userspace is not allowed to get ahead of the previous /* Userspace is not allowed to get ahead of the previous
* commit with nonblocking ones. */ * commit with nonblocking ones. */
if (nonblock && old_plane_state->commit && if (nonblock && old_plane_state->commit &&
!try_wait_for_completion(&old_plane_state->commit->flip_done)) !try_wait_for_completion(&old_plane_state->commit->flip_done)) {
DRM_DEBUG_ATOMIC("[PLANE:%d:%s] busy with a previous commit\n",
plane->base.id, plane->name);
return -EBUSY; return -EBUSY;
}
/* Always track planes explicitly for async pageflip support. */ /* Always track planes explicitly for async pageflip support. */
commit = crtc_or_fake_commit(state, new_plane_state->crtc ?: old_plane_state->crtc); commit = crtc_or_fake_commit(state, new_plane_state->crtc ?: old_plane_state->crtc);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment