Bug 31651 - [SNB] piglit/shaders_glsl-fs-convolution-2 causes system hang
Summary: [SNB] piglit/shaders_glsl-fs-convolution-2 causes system hang
Status: VERIFIED FIXED
Alias: None
Product: Mesa
Classification: Unclassified
Component: Drivers/DRI/i965 (show other bugs)
Version: unspecified
Hardware: All Linux (All)
: high blocker
Assignee: Eric Anholt
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-11-15 22:32 UTC by Yi Sun
Modified: 2010-12-07 17:15 UTC (History)
2 users (show)

See Also:
i915 platform:
i915 features:


Attachments
Recursive locking is bad. (4.36 KB, patch)
2010-11-17 03:08 UTC, Chris Wilson
Details | Splinter Review

Description Yi Sun 2010-11-15 22:32:20 UTC
System Environment:
--------------------------
Libdrm:         (master)2.4.22-14-g877b2ce15b80975b4dac42657bdfb0a3da833e1c
Mesa:           (master)9b4b70e7e28e5371ca5fddd6f8c7e09d8efd5ce0
Xserver:        (master)xorg-server-1.9.0-299-g38c46ccf796462d068d95acb9022de2acfc3a1f7
Xf86_video_intel: (master)2.13.901-3-gcc930a37612341a1f2457adb339523c215879d82
Cairo:          (master)31e116f084d0ff073bed9d0e9c1c6ca1e5db4843
Libva:          (master)7d6bbcfc7709864184a9c56bfbbe4144c4d6c0c2

Kernel: (drm-intel-fixes)85345517fe6d4de27b0d6ca19fef9d28ac947c4a

Bug detailed description:
-------------------------
System hang while run the case piglit/shaders_glsl-fs-convolution-2.
Sometimes, the backtrace is as following when the system hang.

[mi] EQ overflowing. The server is probably stuck in an infinite loop.

Backtrace:
0: /opt/X11R7/bin/X (xorg_backtrace+0x3b) [0x8099fbb]
1: /opt/X11R7/bin/X (mieqEnqueue+0x1ab) [0x8098e2b]
2: /opt/X11R7/bin/X (xf86PostMotionEventM+0xa7) [0x80ab847]
3: /opt/X11R7/bin/X (xf86PostMotionEventP+0x58) [0x80ab988]
4: /opt/X11R7/lib/xorg/modules/input/evdev_drv.so (0xb71b1000+0x32bd) [0xb71b42bd]
5: /opt/X11R7/lib/xorg/modules/input/evdev_drv.so (0xb71b1000+0x3558) [0xb71b4558]
6: /opt/X11R7/bin/X (0x8048000+0x7959f) [0x80c159f]
7: /opt/X11R7/bin/X (0x8048000+0x117e74) [0x815fe74]
8: (vdso) (__kernel_sigreturn+0x0) [0xb772a400]
9: /opt/X11R7/lib/libdrm_intel.so.1 (0xb7590000+0x6139) [0xb7596139]
10: /opt/X11R7/lib/libdrm_intel.so.1 (drm_intel_bo_subdata+0x1d) [0xb7591511]
11: /opt/X11R7/lib/xorg/modules/drivers/intel_drv.so (0xb759b000+0x7e92) [0xb75a2e92]
12: /opt/X11R7/bin/X (0x8048000+0x1335bd) [0x817b5bd]
13: /opt/X11R7/bin/X (0x8048000+0x178021) [0x81c0021]
14: /opt/X11R7/bin/X (0x8048000+0x135f2c) [0x817df2c]
15: /opt/X11R7/bin/X (miPointerUpdateSprite+0x2b3) [0x80983a3]
16: /opt/X11R7/bin/X (0x8048000+0x505cd) [0x80985cd]
17: /opt/X11R7/bin/X (0x8048000+0xa88f8) [0x80f08f8]
18: /opt/X11R7/bin/X (0x8048000+0xc4ada) [0x810cada]
19: /opt/X11R7/bin/X (0x8048000+0x3af8d) [0x8082f8d]
20: /opt/X11R7/bin/X (0x8048000+0x3cbb8) [0x8084bb8]
21: /opt/X11R7/bin/X (0x8048000+0xd9e82) [0x8121e82]
22: /opt/X11R7/bin/X (0x8048000+0x101d60) [0x8149d60]
23: /opt/X11R7/bin/X (mieqProcessDeviceEvent+0x1b4) [0x8098a14]
24: /opt/X11R7/bin/X (mieqProcessInputEvents+0x6c) [0x8098a9c]
25: /opt/X11R7/bin/X (ProcessInputEvents+0x17) [0x80c1817]
26: /opt/X11R7/bin/X (0x8048000+0x2660e) [0x806e60e]
27: /opt/X11R7/bin/X (0x8048000+0x1a17a) [0x806217a]
28: /lib/libc.so.6 (__libc_start_main+0xe6) [0x8e2cc6]
29: /opt/X11R7/bin/X (0x8048000+0x19d51) [0x8061d51]
Comment 1 Yi Sun 2010-11-15 22:57:56 UTC
The case piglit/shaders_glsl-fs-if-nested-loop also causes the system hang.
Comment 2 Gordon Jin 2010-11-16 16:53:46 UTC
This is regression. Yi will try bisect.
Comment 3 Chris Wilson 2010-11-17 03:08:50 UTC
Created attachment 40332 [details] [review]
Recursive locking is bad.

pread -> hang on drm-intel-fixes, could be this bug.
Comment 4 Eric Anholt 2010-11-17 17:20:53 UTC
This isn't really a regression.  This test (and many others) used to assertion fail because of missing IFs support, and loops are not supported.  They are disabled in i965-gen6.tests which is the known-to-hang test set in piglit.

commit da35388044db4aa6fc66c08a087d8d703b5a6008
Author: Eric Anholt <eric@anholt.net>
Date:   Wed Nov 17 14:59:08 2010 +0800

    i965: Fail on loops on gen6 for now until we write the EU emit code for it.
Comment 5 Yi Sun 2010-11-23 23:01:06 UTC
The case still causes system hang. The back-trace is:

Backtrace:
0: X (xorg_backtrace+0x3b) [0x809a70b]
1: X (mieqEnqueue+0x1ab) [0x809957b]
2: X (xf86PostMotionEventP+0xd2) [0x80ac502]
3: /opt/X11R7/lib/xorg/modules/input/evdev_drv.so (0xb7382000+0x338d) [0xb738538
d]
4: /opt/X11R7/lib/xorg/modules/input/evdev_drv.so (0xb7382000+0x3628) [0xb738562
8]
5: X (0x8048000+0x79d7f) [0x80c1d7f]
6: X (0x8048000+0x118d04) [0x8160d04]
7: (vdso) (__kernel_sigreturn+0x0) [0xb78fe400]
8: /opt/X11R7/lib/libdrm_intel.so.1 (0xb7762000+0x6181) [0xb7768181]
9: /opt/X11R7/lib/libdrm_intel.so.1 (drm_intel_bo_subdata+0x1d) [0xb7763511]
10: /opt/X11R7/lib/xorg/modules/drivers/intel_drv.so (0xb776d000+0x81f2) [0xb777
51f2]
11: X (0x8048000+0x1343cd) [0x817c3cd]
12: X (0x8048000+0x179861) [0x81c1861]
13: X (0x8048000+0x136d3c) [0x817ed3c]
14: X (miPointerUpdateSprite+0x2b3) [0x8098af3]
15: X (0x8048000+0x50d1d) [0x8098d1d]
16: X (0x8048000+0xa9218) [0x80f1218]
17: X (0x8048000+0xc537a) [0x810d37a]
18: X (0x8048000+0x3b7cd) [0x80837cd]
19: X (0x8048000+0x3d3c8) [0x80853c8]
20: X (0x8048000+0xda752) [0x8122752]
21: X (0x8048000+0x1029a0) [0x814a9a0]
22: X (mieqProcessDeviceEvent+0x1b4) [0x8099164]
23: X (mieqProcessInputEvents+0x6c) [0x80991ec]
24: X (ProcessInputEvents+0x17) [0x80c1ff7]
25: X (0x8048000+0x2620e) [0x806e20e]
26: X (0x8048000+0x1a30a) [0x806230a]
27: /lib/libc.so.6 (__libc_start_main+0xe6) [0x8e2cc6]
28: X (0x8048000+0x19ee1) [0x8061ee1]
Comment 6 Yi Sun 2010-11-28 18:11:21 UTC
9effc1adf1e7ba57fb3b10909762b76c1ae12f61 is the first commit causes system hang


commit 9effc1adf1e7ba57fb3b10909762b76c1ae12f61
Author: Eric Anholt <eric@anholt.net>
Date:   Mon Oct 11 16:02:08 2010 -0700

    i965: re-enable gen6 IF statements in the fragment shader.

    IF statements were getting flattened while they were broken.  With
    Zhenyu's last fix for ENDIF's type, everything appears to have lined
    up to actually work.

    This regresses two tests:
    glsl1-! (not) operator (1, fail)
    glsl1-! (not) operator (1, pass)

    but fixes tests that couldn't work before because the IFs couldn't be
    flattened:
    glsl-fs-discard-01
    occlusion-query-discard

    (and, naturally, this should be a performance improvement for apps
    that actually use IF statements to avoid executing a bunch of code).
Comment 7 Yi Sun 2010-11-29 22:11:00 UTC
Now,in all, there are 4 piglit cases which are able to make system hang.
shaders_glsl-fs-convolution-2
shaders_glsl-fs-if-nested-loop
shaders_glsl-fs-loop
shaders_glsl-fs-loop-nested
Comment 8 Eric Anholt 2010-12-01 16:32:13 UTC
commit 251d15d888dfaea045447f9e56ea094cb726830b
Author: Eric Anholt <eric@anholt.net>
Date:   Wed Dec 1 15:36:26 2010 -0800

    i965: Enable IF statements in the VS.
    
    While the actual IF instructions were fixed by Zhenyu, we were still
    flattening them to conditional moves.

commit 843a6a308e05bd4bf2056e08ec65ac4770097b93
Author: Eric Anholt <eric@anholt.net>
Date:   Wed Dec 1 14:02:14 2010 -0800

    i965: Add support for gen6 CONTINUE instruction emit.
    
    At this point, piglit tests for fragment shader loops are working.

commit 00e5a743e2ee3981a34b95067a97fa73c0f5d779
Author: Eric Anholt <eric@anholt.net>
Date:   Wed Dec 1 11:46:46 2010 -0800

    i965: Add support for gen6 BREAK ISA emit.
    
    There are now two targets: the hop-to-end-of-block target, and the
    target for where to resume execution for active channels.

commit 4890e0f09c934e3ffb692b417e5444e43685c876
Author: Eric Anholt <eric@anholt.net>
Date:   Wed Dec 1 10:45:52 2010 -0800

    i965: Add support for gen6 DO/WHILE ISA emit.
    
    There's no more DO since there's no more mask stack, and WHILE has
    been shuffled like IF was.
Comment 9 Yi Sun 2010-12-07 17:15:26 UTC
All the 4 cases mentioned have passed.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.