915gm/945gm/XAA lockup with gray blocks when switching video mode

Bryce Harrington bryce at bryceharrington.org
Wed Oct 10 18:12:37 PDT 2007


On Wed, Oct 10, 2007 at 09:17:44PM +0000, Juan Pablo Salazar Bertin wrote:
> I'd like to add some things about this bug:
> 
> It has been reported also at https://bugs.freedesktop.org/show_bug.cgi?
> id=10586.
> 
> After several debugs, I've determined that the laptop hangs in the following 
> loop in file i830_driver.c:
> 
>    for(i = 0; i < 256; i++) {
>       OUTREG(PALETTE_A + (i << 2), pI830->savePaletteA[i]);
>    }
> 
> You can see full gdb output here: https://bugs.freedesktop.org/attachment.cgi?
> id=11964&action=view
> After the last line, the laptop hangs.

Here is the tail end of an strace of Xorg when replicating the bug:

0. pgrep Xorg to get pid
   strace -p pid
1. Disable desktop effects and enable desktop effects again.
2. Very rapidly, switch to VT1 and switch back to VT7.
3. Repeat steps 1 and 2 many times

gettimeofday({1192064415, 462291}, NULL) = 0
gettimeofday({1192064415, 462395}, NULL) = 0
munmap(0xa3060000, 1683456)             = 0
read(20, 0x87e9fb8, 4096)               = -1 EAGAIN (Resource temporarily unavailable)
gettimeofday({1192064415, 464224}, NULL) = 0
select(256, [1 3 4 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34], NULL, NULL, {0, 545000}) = 6 (in [4 14 18 19 30 34], left {0, 545000})
rt_sigprocmask(SIG_BLOCK, [IO], [], 8)  = 0
read(4, ";", 64)                        = 1
gettimeofday({1192064415, 464591}, NULL) = 0
rt_sigprocmask(SIG_BLOCK, [], [IO], 8)  = 0
rt_sigprocmask(SIG_UNBLOCK, [IO], NULL, 8) = 0
gettimeofday({1192064415, 464798}, NULL) = 0
ioctl(4, VIDIOC_G_COMP or VT_ACTIVATE, 0x1) = 0
--- SIGUSR1 (User defined signal 1) @ 0 (0) ---
rt_sigaction(SIGUSR1, {0x80b1ce0, [USR1], SA_RESTART}, {0x80b1ce0, [USR1], SA_RESTART}, 8) = 0
sigreturn()                             = ? (mask now [])
read(30, "\24\0\6\0X\0\0\0\177\1\0\0\6\0\0\0\0\0\0\0\377\377\377"..., 4096) = 24
read(30, 0x8c1d2e8, 4096)               = -1 EAGAIN (Resource temporarily unavailable)
writev(30, [{"\1 A\26\2\0\0\0\6\0\0\0\0\0\0\0\2\0\0\0`\202\36\10\340"..., 40}], 1) = 40
gettimeofday({1192064415, 465442}, NULL) = 0
select(256, [1 3 4 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34], NULL, NULL, {0, 499000}) = 5 (in [14 18 19 30 34], left {0, 499000})
writev(20, [{"\17\261\\\31\274\0 \1\2\262\227\277\230\277\257\10(\261"..., 32}], 1) = 32
ioctl(4, KDSKBMODE, 0x1)                = 0
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, {B0 -opost -isig -icanon -echo ...}) = 0
ioctl(4, SNDCTL_TMR_START or TCSETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
write(2, "Synaptics DeviceOff called\n", 27) = 27
write(0, "Synaptics DeviceOff called\n", 27) = 27
fcntl64(10, F_GETFL)                    = 0x2802 (flags O_RDWR|O_NONBLOCK|O_ASYNC)
fcntl64(10, F_SETFL, O_RDWR|O_NONBLOCK) = 0
close(10)                               = 0
fcntl64(11, F_GETFL)                    = 0x2802 (flags O_RDWR|O_NONBLOCK|O_ASYNC)
fcntl64(11, F_SETFL, O_RDWR|O_NONBLOCK) = 0
close(11)                               = 0
nanosleep({0, 300000000}, 0)            = ? ERESTART_RESTARTBLOCK (To be restarted)
--- SIGALRM (Alarm clock) @ 0 (0) ---
setitimer(ITIMER_REAL, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0
sigreturn()                             = ? (mask now [])
rt_sigprocmask(SIG_BLOCK, [IO], [], 8)  = 0
write(0, "(II) AIGLX: Suspending AIGLX cli"..., 51) = 51
gettimeofday({1192064415, 468371}, NULL) = 0
gettimeofday({1192064415, 468433}, NULL) = 0
ioctl(8, 0x4004644d, 0xbf97b308)        = 0
ioctl(8, 0x40086414, 0xbf97b30c)        = 0
gettimeofday({1192064415, 468536}, NULL) = 0
gettimeofday({1192064415, 468566}, NULL) = 0
ioctl(8, 0x4004644d, 0xbf97b2d8)        = 0
lseek(5, 244, SEEK_SET)                 = 244
read(5, "\377", 1)                      = 1
nanosleep({0, 30000000}, NULL)          = 0
nanosleep({0, 30000000}, NULL)          = 0
nanosleep({0, 150000}, NULL)            = 0
ioctl(8, 0x4004644d, 0xbf97b298)        = 0
nanosleep({0, 30000000}, NULL)          = 0
nanosleep({0, 150000}, NULL)            = 0
ioctl(8, 0x4004644d, 0xbf97b298)        = 0
nanosleep({0, 30000000}, NULL)          = 0
nanosleep({0, 150000}, NULL)            = 0
nanosleep({0, 150000}, NULL)            = 0
nanosleep({0, 30000000}, NULL)          = 0
nanosleep({0, 30000000}, NULL)          = 0
nanosleep({0, 150000}, NULL)            = 0
nanosleep({0, 150000}, NULL)            = 0
nanosleep({0, 150000}, NULL)            = 0
nanosleep({0, 30000000}, NULL)          = 0
nanosleep({0, 30000000}, NULL)          = 0
lseek(5, 244, SEEK_SET)                 = 244
read(5, "\377", 1)                      = 1

Locks up with gray blinking blocks at this point.  System is
unresponsive via ssh, ping, tty switch, caps lock, etc. at this point.

It seemed sensitive to how quickly the mode is switched, as if it hasn't
completed the previous switch before you start the next.

Bryce



More information about the xorg mailing list