2009-04-24 00:52:40

by Justin Madru

[permalink] [raw]
Subject: [.30-rc2 regression] garbled screen on video

Hi everyone,

Summary:
After playing a video for a little bit, the screen gets garbled. The
only way to fix it is to
switch to a virtual console and then back. The screen is fixed but
unfortunately only for
less than a few minuets and the screen gets corrupted again.

Effected Version: 2.6.30-rc2+
Picture showing a corrupt screen:
http://ecs.fullerton.edu/~cs351a15/badscreen.jpg

My System:
Ubuntu 9.4 with 943/940GML Express Integrated Graphics Controller
[8086:27a2]
UXA/GEM/DRI2 enable. Full info at
http://jdserver.homelinux.org/bugreports/004/

Syslog Messages:
None, but switching virtual consoles gives
[drm:i915_get_vblank_counter] *ERROR* trying to get vblank count for
disabled pipe 0
But I think that is another bug introduced with .30-rc1.

Bisecting gave me the following (verified) commit

280b713b5b0fd84cf2469098aee88acbb5de859c is first bad commit
commit 280b713b5b0fd84cf2469098aee88acbb5de859c
Author: Eric Anholt <[email protected]>
Date: Thu Mar 12 16:56:27 2009 -0700

drm/i915: Allow tiling of objects with bit 17 swizzling by the CPU.

Save the bit 17 state of the pages when freeing the page list, and
reswizzle them if necessary when rebinding the pages (in case they were
swapped out). Since we have userland with expectations that the swizzle
enums let it pread and pwrite contents accurately, we can't expose a new
swizzle enum for bit 17 (which it would have to GTT map to handle),
so we
handle it down in pread and pwrite by swizzling the copy when bit 17
of the
page address is set.

Signed-off-by: Eric Anholt <[email protected]>

:040000 040000 32f68f62b336326cee85e22f068d4410197994ef
e820ef2a2fd3f9133960f390f27c79caa5ec83d2 M drivers
:040000 040000 573ade35bd21d9c37c43f470d8ab718f728ef101
32642903c265079acfa20b71d4ec2ee427a70c3a M include

Justin Madru


2009-04-28 18:18:46

by Eric Anholt

[permalink] [raw]
Subject: Re: [.30-rc2 regression] garbled screen on video

On Thu, 2009-04-23 at 17:52 -0700, Justin Madru wrote:
> Hi everyone,
>
> Summary:
> After playing a video for a little bit, the screen gets garbled. The
> only way to fix it is to
> switch to a virtual console and then back. The screen is fixed but
> unfortunately only for
> less than a few minuets and the screen gets corrupted again.
>
> Effected Version: 2.6.30-rc2+
> Picture showing a corrupt screen:
> http://ecs.fullerton.edu/~cs351a15/badscreen.jpg
>
> My System:
> Ubuntu 9.4 with 943/940GML Express Integrated Graphics Controller
> [8086:27a2]
> UXA/GEM/DRI2 enable. Full info at
> http://jdserver.homelinux.org/bugreports/004/
>
> Syslog Messages:
> None, but switching virtual consoles gives
> [drm:i915_get_vblank_counter] *ERROR* trying to get vblank count for
> disabled pipe 0
> But I think that is another bug introduced with .30-rc1.

Interesting. Could you open a bug at bugs.freedesktop.org against xorg,
driver/intel, to be sure this doesn't get lost?

However, I suspect that the commit in question isn't causing your issue,
but is just when tiling got reenabled on your platform so you got to see
other (likely userland) bugs. To test, you could revert the patch you
bisected to and just apply one of the hunks with a little tweak:

diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c
index 6be3f92..f27e523 100644
--- a/drivers/gpu/drm/i915/i915_gem_tiling.c
+++ b/drivers/gpu/drm/i915/i915_gem_tiling.c
@@ -127,8 +129,8 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
swizzle_y = I915_BIT_6_SWIZZLE_9_11;
} else {
/* Bit 17 swizzling by the CPU in addition. */
- swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN;
- swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN;
+ swizzle_x = I915_BIT_6_SWIZZLE_9_10;
+ swizzle_y = I915_BIT_6_SWIZZLE_9;
}
break;
}

You'll get typical swizzling corruption if any tiled buffers get swapped
out, but that shouldn't happen because Ubuntu 9.04 is stuck with DRI1 so
all tiled buffers are pinned. Note that DRI1 with compiz has many
graphical corruption and stability issues that are fixed with DRI2, but
I'm not sure that what you're seeing is one of those.

If that patch doesn't make things work, then to fix a giant pile of
userland bugs that might account for it, update to the 2.7.0 2D driver
and enable UXA, which will get you DRI2.

If the revert + small diff fixes things, I'm interested in seeing the
output of either reg_dumper from a compile of the 2D driver or a printk
of dcc in that function, combined with a screenshot of mesa's readpix
demo, on master (no reverts or anything).

--
Eric Anholt
[email protected] [email protected]



Attachments:
signature.asc (197.00 B)
This is a digitally signed message part

2009-04-29 05:20:06

by Justin Madru

[permalink] [raw]
Subject: Re: [.30-rc2 regression] garbled screen on video

Eric Anholt wrote:
> On Thu, 2009-04-23 at 17:52 -0700, Justin Madru wrote:
>
>> Hi everyone,
>>
>> Summary:
>> After playing a video for a little bit, the screen gets garbled. The
>> only way to fix it is to
>> switch to a virtual console and then back. The screen is fixed but
>> unfortunately only for
>> less than a few minuets and the screen gets corrupted again.
>>
>> Effected Version: 2.6.30-rc2+
>> Picture showing a corrupt screen:
>> http://ecs.fullerton.edu/~cs351a15/badscreen.jpg
>>
>> My System:
>> Ubuntu 9.4 with 943/940GML Express Integrated Graphics Controller
>> [8086:27a2]
>> UXA/GEM/DRI2 enable. Full info at
>> http://jdserver.homelinux.org/bugreports/004/
>>
>> Syslog Messages:
>> None, but switching virtual consoles gives
>> [drm:i915_get_vblank_counter] *ERROR* trying to get vblank count for
>> disabled pipe 0
>> But I think that is another bug introduced with .30-rc1.
>>
>
> Interesting. Could you open a bug at bugs.freedesktop.org against xorg,
> driver/intel, to be sure this doesn't get lost?
>
> However, I suspect that the commit in question isn't causing your issue,
> but is just when tiling got reenabled on your platform so you got to see
> other (likely userland) bugs. To test, you could revert the patch you
> bisected to and just apply one of the hunks with a little tweak:
>
> diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c
> index 6be3f92..f27e523 100644
> --- a/drivers/gpu/drm/i915/i915_gem_tiling.c
> +++ b/drivers/gpu/drm/i915/i915_gem_tiling.c
> @@ -127,8 +129,8 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
> swizzle_y = I915_BIT_6_SWIZZLE_9_11;
> } else {
> /* Bit 17 swizzling by the CPU in addition. */
> - swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN;
> - swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN;
> + swizzle_x = I915_BIT_6_SWIZZLE_9_10;
> + swizzle_y = I915_BIT_6_SWIZZLE_9;
> }
> break;
> }
>
> You'll get typical swizzling corruption if any tiled buffers get swapped
> out, but that shouldn't happen because Ubuntu 9.04 is stuck with DRI1 so
> all tiled buffers are pinned. Note that DRI1 with compiz has many
> graphical corruption and stability issues that are fixed with DRI2, but
> I'm not sure that what you're seeing is one of those.
>
>
I had UXA enabled when I get the screen corruption. And kernels before
2.6.30-rc2
don't have the screen corruption. Ubuntu 9.4 has intel 2.6.3 driver I think.

> If that patch doesn't make things work, then to fix a giant pile of
> userland bugs that might account for it, update to the 2.7.0 2D driver
> and enable UXA, which will get you DRI2.
>
> If the revert + small diff fixes things, I'm interested in seeing the
> output of either reg_dumper from a compile of the 2D driver or a printk
> of dcc in that function, combined with a screenshot of mesa's readpix
> demo, on master (no reverts or anything).
>
>
So do I apply your patch with the current revert still inplace?

And where do I find the reg_dumper, dcc printk and the mesa readpix demo?

Justin Madru