retitle 206907 xserver-xfree86: [glint] endless loop in Permedia2Sync() while using xscreensaver
tag 206907 + upstream
thanks
On Sat, Aug 23, 2003 at 07:53:17PM +0200, David N. Welton wrote:
> Package: xserver-xfree86
> Version: 4.2.1-10
> Severity: normal
>
> While running xscreensaver, X appears to hang, somewhat randomly. I
> downloaded the debug server, and attached to it when the problem
> occurred:
[...]
> (gdb) bt
> #0 0x080826e7 in Permedia2Sync (pScrn=0x8942ec0) at pm2_accel.c:404
[...]
> Let's try doing stepi:
>
> 404 in pm2_accel.c
> (gdb)
> 0x080826d3 404 in pm2_accel.c
> (gdb)
> 0x080826d6 404 in pm2_accel.c
> (gdb)
> 0x080826dc 404 in pm2_accel.c
> (gdb)
> 0x080826e2 404 in pm2_accel.c
> (gdb)
> 0x080826e5 404 in pm2_accel.c
> (gdb)
> 0x080826e7 404 in pm2_accel.c
> (gdb)
> 0x080826e9 404 in pm2_accel.c
> (gdb)
> 404 in pm2_accel.c
>
> Doesn't seem to want to exit from that.
[...]
> I don't have the source code, so I'm afraid that's where my digging
> ends. I can look around some more if you tell me exactly what to do.
Nah. I keep source trees around just for this sort of contingency.
Let's have a look at our first contestant, shall we?
392 void
393 Permedia2Sync(ScrnInfoPtr pScrn)
394 {
395 GLINTPtr pGlint = GLINTPTR(pScrn);
396
397 CHECKCLIPPING;
398
399 while (GLINT_READ_REG(DMACount) != 0);
400 GLINT_WAIT(2);
401 GLINT_WRITE_REG(0x400, FilterMode);
402 GLINT_WRITE_REG(0, GlintSync);
403 do {
404 while(GLINT_READ_REG(OutFIFOWords) == 0);
405 } while (GLINT_READ_REG(OutputFIFO) != Sync_tag);
406 }
Well, that certainly looks like a good way to fuck yourself. Whoever
wrote this code has a lot of confidence in the underlying hardware.
Since I happen to know that Sven Luther does a lot of glint driver work,
I'm CCing him on this message.
Sven, any ideas?
--
G. Branden Robinson | We either learn from history or,
Debian GNU/Linux | uh, well, something bad will
branden@debian.org | happen.
http://people.debian.org/~branden/ | -- Bob Church
Attachment:
pgp4eJDMEfQXL.pgp
Description: PGP signature