All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Oldřich Jedlička" <oldium.pro@seznam.cz>
To: dri-devel@lists.sourceforge.net
Subject: [PATCH v2] drm/radeon/kms: Fix for CS track check to allow at least one enabled component
Date: Wed, 10 Feb 2010 23:54:13 +0100	[thread overview]
Message-ID: <201002102354.13717.oldium.pro@seznam.cz> (raw)
In-Reply-To: <201002102345.30154.oldium.pro@seznam.cz>

The current code causes failing of rendering (discovered on my KDE
4.4) with message:

r600_cs_track_check:252 mask 0x0000000F | 0xFFFFFFFF no cb for 1

The problem is in the check of "at least one component is enabled" in
r600_cs_track_check() - it finds the first component and does not check
the rest. My patch fixes this by introducing is_valid local variable
and checking all enabled components. The check returns failure only
when there is really no component enabled.

Signed-off-by: Oldřich Jedlička <oldium.pro@seznam.cz>
---
 drivers/gpu/drm/radeon/r600_cs.c |   20 ++++++++++++--------
 1 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c
index 7cabb62..f1dab96 100644
--- a/drivers/gpu/drm/radeon/r600_cs.c
+++ b/drivers/gpu/drm/radeon/r600_cs.c
@@ -233,6 +233,7 @@ static int r600_cs_track_check(struct radeon_cs_parser *p)
 	struct r600_cs_track *track = p->track;
 	u32 tmp;
 	int r, i;
+	bool is_valid = false;
 
 	/* on legacy kernel we don't perform advanced check */
 	if (p->rdev == NULL)
@@ -247,17 +248,20 @@ static int r600_cs_track_check(struct radeon_cs_parser *p)
 	for (i = 0; i < 8; i++) {
 		if ((tmp >> (i * 4)) & 0xF) {
 			/* at least one component is enabled */
-			if (track->cb_color_bo[i] == NULL) {
-				dev_warn(p->dev, "%s:%d mask 0x%08X | 0x%08X no cb for %d\n",
-					__func__, __LINE__, track->cb_target_mask, track->cb_shader_mask, i);
-				return -EINVAL;
+			if (track->cb_color_bo[i] != NULL) {
+				/* perform rewrite of CB_COLOR[0-7]_SIZE */
+				r = r600_cs_track_validate_cb(p, i);
+				if (r)
+					return r;
+				is_valid = true;
 			}
-			/* perform rewrite of CB_COLOR[0-7]_SIZE */
-			r = r600_cs_track_validate_cb(p, i);
-			if (r)
-				return r;
 		}
 	}
+	if (!is_valid) {
+		dev_warn(p->dev, "%s:%d mask 0x%08X | 0x%08X no cb found\n",
+			__func__, __LINE__, track->cb_target_mask, track->cb_shader_mask);
+		return -EINVAL;
+	}
 	return 0;
 }
 
-- 
1.6.6.1


------------------------------------------------------------------------------
SOLARIS 10 is the OS for Data Centers - provides features such as DTrace,
Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW
http://p.sf.net/sfu/solaris-dev2dev
--

  reply	other threads:[~2010-02-10 22:54 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-10 22:36 [PATCH] drm/radeon/kms: Fix for CS track check to allow at least one enabled component Oldřich Jedlička
2010-02-10 22:45 ` Oldřich Jedlička
2010-02-10 22:54   ` Oldřich Jedlička [this message]
2010-02-11 17:19     ` [PATCH v2] " Oldřich Jedlička
2010-02-10 22:58 ` [PATCH] " Jerome Glisse

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=201002102354.13717.oldium.pro@seznam.cz \
    --to=oldium.pro@seznam.cz \
    --cc=dri-devel@lists.sourceforge.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.