Bug 21640

Summary: [G45 KMS] Fullscreen video hangs X
Product: xorg Reporter: Sven Arvidsson <sa>
Component: Driver/intelAssignee: Eric Anholt <eric>
Status: RESOLVED FIXED QA Contact: Xorg Project Team <xorg-team>
Severity: critical    
Priority: medium    
Version: 7.4 (2008.09)   
Hardware: x86-64 (AMD64)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments:
Description Flags
full dmesg output
none
Xorg log
none
backtrace from Xorg
none
GPU dump from G45 after hang none

Description Sven Arvidsson 2009-05-09 03:42:05 UTC
Created attachment 25658 [details]
full dmesg output

Some of the time when I switch a playing video (textured video) from a window, to fullscreen X hangs. This only happens when KMS is enabled.

[57240.448012] INFO: task events/0:9 blocked for more than 120 seconds.
[57240.448016] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[57240.448018] events/0      D ffff88012fb52e20     0     9      2
[57240.448023]  ffff88012f1a6fa0 0000000000000046 ffffffff8024b4ac ffff88012fb52e20
[57240.448027]  ffff88012e45bc92 0000000000011f00 000000000000e250 ffff88012fb52e20
[57240.448031]  ffff88012fb53110 000000002fb52e58 ffff880028033f00 ffff880028033f00
[57240.448035] Call Trace:
[57240.448042]  [<ffffffff8024b4ac>] ? __mod_timer+0xc9/0xd9
[57240.448046]  [<ffffffff80235e44>] ? dequeue_entity+0xf/0x11f
[57240.448050]  [<ffffffff8023e152>] ? finish_task_switch+0x4d/0xf0
[57240.448054]  [<ffffffff80487843>] ? __mutex_lock_common+0x118/0x196
[57240.448058]  [<ffffffff8024b4ac>] ? __mod_timer+0xc9/0xd9
[57240.448070]  [<ffffffffa046690e>] ? i915_gem_retire_work_handler+0x0/0x65 [i915]
[57240.448074]  [<ffffffff804876a2>] ? mutex_lock+0x12/0x28
[57240.448083]  [<ffffffffa0466935>] ? i915_gem_retire_work_handler+0x27/0x65 [i915]
[57240.448088]  [<ffffffff8025130e>] ? worker_thread+0x17d/0x220
[57240.448091]  [<ffffffff80254b1a>] ? autoremove_wake_function+0x0/0x2e
[57240.448094]  [<ffffffff80251191>] ? worker_thread+0x0/0x220
[57240.448097]  [<ffffffff80251191>] ? worker_thread+0x0/0x220
[57240.448100]  [<ffffffff80254756>] ? kthread+0x54/0x80
[57240.448104]  [<ffffffff80210aca>] ? child_rip+0xa/0x20
[57240.448107]  [<ffffffff80254702>] ? kthread+0x0/0x80
[57240.448110]  [<ffffffff80210ac0>] ? child_rip+0x0/0x20


System environment:
-- chipset: G45 / ICH10R
-- system architecture: 64-bit
-- Linux distribution: Debian unstable
-- Machine or mobo model: Asus P5Q-EM
-- Display connector: DVI
-- xf86-video-intel: 2.7.99.1
-- xserver: 1.6.1
-- mesa: 7.4.1
-- drm: 2.4.9
-- kernel: 2.6.30-rc4 (with 5ca58282089b11f64b911618036ee7676f12735b reverted because of bug 21210)
Comment 1 Sven Arvidsson 2009-05-09 03:42:51 UTC
Created attachment 25659 [details]
Xorg log
Comment 2 Sven Arvidsson 2009-05-09 03:43:09 UTC
Created attachment 25660 [details]
backtrace from Xorg
Comment 3 Eric Anholt 2009-05-09 08:06:09 UTC
What movie player?  Does it apply to all movies?
Comment 4 Sven Arvidsson 2009-05-10 05:25:47 UTC
I'm using Totem 2.26.1 (with the GStreamer backend). 

It doesn't seem to happen with all videos, I have uploaded the first 10M of the video most likely to cause the bug here: http://www.wikiupload.com/download_page.php?id=123273

It's an XVID MPEG-4, 560 x 416, 24 frames per second.
Comment 5 Jesse Barnes 2009-05-11 11:22:00 UTC
Adjusting severity: crashes & hangs should be marked critical.
Comment 6 Eric Anholt 2009-05-14 15:24:58 UTC
Oh, hmm, intel_gpu_dump output would also be useful -- we can get the pipe mappings wrong in KMS mode, which cworth has written a patchset for.
Comment 7 Sven Arvidsson 2009-05-14 17:52:10 UTC
Created attachment 25879 [details]
GPU dump from G45 after hang

I'm attaching a gpu dump from my G45.

Meanwhile, I have noticed two things: the bug only seems to occur when the resolution is set to 1680x1050, and the same hang also happens on my Eee PC (915GM) so it's not specific to G45.
Comment 8 Eric Anholt 2009-05-15 17:03:41 UTC
Excellent, that hang looks like the one we just fixed with cworth's new ioctl.  The kernel fix is:

commit 08d7b3d1edff84bd673d9e9ab36b5aa62e1ba903
Author: Carl Worth <cworth@cworth.org>
Date:   Wed Apr 29 14:43:54 2009 -0700

    drm/i915: Add new GET_PIPE_FROM_CRTC_ID ioctl.
    
    This allows userlevel code to discover the pipe number corresponding
    to a given CRTC ID. This is necessary for doing pipe-specific
    operations such as waiting for vblank on a given CRTC.  Failure to use
    the right pipe mapping can result in GPU hangs, or at least failure
    to actually sync to vblank.
    
    Signed-off-by: Carl Worth <cworth@cworth.org>
    [anholt: Style touchups from review]
    Signed-off-by: Eric Anholt <eric@anholt.net>

and there are corresponding changes to libdrm and the 2D driver as well.

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.