Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a1a82133 authored by Alex Deucher's avatar Alex Deucher Committed by Dave Airlie
Browse files

drm/radeon/kms: disable the r600 cb offset checker for linear surfaces



There are too many strange corner cases triggered in old userspace
drivers out there to that it's nearly impossible to not break some
obscure app.

Cc: Jean Delvare <khali@linux-fr.org>
Signed-off-by: default avatarAlex Deucher <alexdeucher@gmail.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent e5fd205f
Loading
Loading
Loading
Loading
+4 −5
Original line number Original line Diff line number Diff line
@@ -315,11 +315,10 @@ static inline int r600_cs_track_validate_cb(struct radeon_cs_parser *p, int i)
		if (array_mode == V_0280A0_ARRAY_LINEAR_GENERAL) {
		if (array_mode == V_0280A0_ARRAY_LINEAR_GENERAL) {
			/* the initial DDX does bad things with the CB size occasionally */
			/* the initial DDX does bad things with the CB size occasionally */
			/* it rounds up height too far for slice tile max but the BO is smaller */
			/* it rounds up height too far for slice tile max but the BO is smaller */
			tmp = (height - 7) * 8 * bpe;
			/* r600c,g also seem to flush at bad times in some apps resulting in
			if ((tmp + track->cb_color_bo_offset[i]) > radeon_bo_size(track->cb_color_bo[i])) {
			 * bogus values here. So for linear just allow anything to avoid breaking
				dev_warn(p->dev, "%s offset[%d] %d %d %lu too big\n", __func__, i, track->cb_color_bo_offset[i], tmp, radeon_bo_size(track->cb_color_bo[i]));
			 * broken userspace.
				return -EINVAL;
			 */
			}
		} else {
		} else {
			dev_warn(p->dev, "%s offset[%d] %d %d %lu too big\n", __func__, i, track->cb_color_bo_offset[i], tmp, radeon_bo_size(track->cb_color_bo[i]));
			dev_warn(p->dev, "%s offset[%d] %d %d %lu too big\n", __func__, i, track->cb_color_bo_offset[i], tmp, radeon_bo_size(track->cb_color_bo[i]));
			return -EINVAL;
			return -EINVAL;