public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
To: dri-devel@lists.freedesktop.org
Cc: Gustavo Padovan <gustavo.padovan@collabora.com>,
	intel-gfx@lists.freedesktop.org
Subject: [PATCH v2 2/7] drm/atomic: Clean up drm_atomic_helper_async_check
Date: Wed, 19 Jul 2017 16:39:15 +0200	[thread overview]
Message-ID: <20170719143920.25685-3-maarten.lankhorst@linux.intel.com> (raw)
In-Reply-To: <20170719143920.25685-1-maarten.lankhorst@linux.intel.com>

Instead of assigning plane to __plane, iterate over plane
which is the same thing. Simplify the check for n_planes != 1,
at that point we know plane != NULL as well.

Rename obj_state to new_obj_state, and get rid of the bogus stuff.
crtc->state->state is NEVER non-null, if it is, there is a bug.
We should definitely try to prevent async updates if there are flips
queued, but this code will simply not be executed and needs to be
rethought.

Also remove the loop too, because we're trying to loop over the crtc until
we find plane_state->crtc == crtc, which we already know is non-zero.
It's dead code anyway. :)

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Gustavo Padovan <gustavo.padovan@collabora.com>
---
 drivers/gpu/drm/drm_atomic_helper.c | 56 ++++++++++---------------------------
 1 file changed, 15 insertions(+), 41 deletions(-)

diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index a46b51291006..c538528a794a 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -1372,68 +1372,42 @@ int drm_atomic_helper_async_check(struct drm_device *dev,
 				   struct drm_atomic_state *state)
 {
 	struct drm_crtc *crtc;
-	struct drm_crtc_state *crtc_state;
-	struct drm_crtc_commit *commit;
-	struct drm_plane *__plane, *plane = NULL;
-	struct drm_plane_state *__plane_state, *plane_state = NULL;
+	struct drm_crtc_state *new_crtc_state;
+	struct drm_plane *plane;
+	struct drm_plane_state *new_plane_state;
 	const struct drm_plane_helper_funcs *funcs;
-	int i, j, n_planes = 0;
+	int i, n_planes = 0;
 
-	for_each_new_crtc_in_state(state, crtc, crtc_state, i) {
-		if (drm_atomic_crtc_needs_modeset(crtc_state))
+	for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) {
+		if (drm_atomic_crtc_needs_modeset(new_crtc_state))
 			return -EINVAL;
 	}
 
-	for_each_new_plane_in_state(state, __plane, __plane_state, i) {
+	for_each_new_plane_in_state(state, plane, new_plane_state, i)
 		n_planes++;
-		plane = __plane;
-		plane_state = __plane_state;
-	}
 
 	/* FIXME: we support only single plane updates for now */
-	if (!plane || n_planes != 1)
+	if (n_planes != 1)
 		return -EINVAL;
 
-	if (!plane_state->crtc)
+	if (!new_plane_state->crtc)
 		return -EINVAL;
 
 	funcs = plane->helper_private;
 	if (!funcs->atomic_async_update)
 		return -EINVAL;
 
-	if (plane_state->fence)
+	if (new_plane_state->fence)
 		return -EINVAL;
 
 	/*
-	 * Don't do an async update if there is an outstanding commit modifying
-	 * the plane.  This prevents our async update's changes from getting
-	 * overridden by a previous synchronous update's state.
+	 * FIXME: We should prevent an async update if there is an outstanding
+	 * commit modifying the plane.  This prevents our async update's
+	 * changes from getting overwritten by a previous synchronous update's
+	 * state.
 	 */
-	for_each_new_crtc_in_state(state, crtc, crtc_state, i) {
-		if (plane->crtc != crtc)
-			continue;
-
-		spin_lock(&crtc->commit_lock);
-		commit = list_first_entry_or_null(&crtc->commit_list,
-						  struct drm_crtc_commit,
-						  commit_entry);
-		if (!commit) {
-			spin_unlock(&crtc->commit_lock);
-			continue;
-		}
-		spin_unlock(&crtc->commit_lock);
-
-		if (!crtc->state->state)
-			continue;
-
-		for_each_plane_in_state(crtc->state->state, __plane,
-					__plane_state, j) {
-			if (__plane == plane)
-				return -EINVAL;
-		}
-	}
 
-	return funcs->atomic_async_check(plane, plane_state);
+	return funcs->atomic_async_check(plane, new_plane_state);
 }
 EXPORT_SYMBOL(drm_atomic_helper_async_check);
 
-- 
2.11.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2017-07-19 14:39 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-19 14:39 [PATCH v2 0/7] drm/atomic: Remove deprecated atomic iterator macros, v2 Maarten Lankhorst
2017-07-19 14:39 ` [PATCH v2 1/7] drm/atomic: Use new iterator macros in drm_atomic_helper_wait_for_flip_done, again Maarten Lankhorst
2017-07-25  8:19   ` Daniel Vetter
2017-07-19 14:39 ` Maarten Lankhorst [this message]
2017-07-25  8:23   ` [PATCH v2 2/7] drm/atomic: Clean up drm_atomic_helper_async_check Daniel Vetter
2017-07-25  9:11     ` Maarten Lankhorst
2017-07-25  9:27       ` Daniel Vetter
2017-07-25 10:36         ` Maarten Lankhorst
2017-07-19 14:39 ` [PATCH v2 3/7] drm/rcar-du: Use new iterator macros, v2 Maarten Lankhorst
2017-07-25  8:26   ` Daniel Vetter
2017-07-26 11:53   ` Laurent Pinchart
2017-07-29 20:57     ` Laurent Pinchart
2017-07-19 14:39 ` [PATCH v2 4/7] drm/omapdrm: Fix omap_atomic_wait_for_completion Maarten Lankhorst
2017-07-25  8:27   ` Daniel Vetter
2017-08-01  9:50     ` Maarten Lankhorst
2017-07-19 14:39 ` [PATCH v2 5/7] drm/msm: Convert to use new iterator macros, v2 Maarten Lankhorst
2017-07-19 14:39 ` [PATCH v2 6/7] drm/nouveau: Convert nouveau " Maarten Lankhorst
2017-07-25  9:04   ` Daniel Vetter
2017-07-19 14:39 ` [PATCH v2 7/7] drm/atomic: Remove deprecated accessor macros Maarten Lankhorst
2017-07-25  9:05   ` Daniel Vetter
2017-07-19 15:12 ` ✓ Fi.CI.BAT: success for drm/atomic: Remove deprecated atomic iterator macros, v2 Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170719143920.25685-3-maarten.lankhorst@linux.intel.com \
    --to=maarten.lankhorst@linux.intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gustavo.padovan@collabora.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox