retitle 282645 xserver-xfree86: [nv] SEGV in NVDmaWait() when using XAA on NV5M64 [RIVA TNT2 Model 64/Model 64 Pro] rev 21
severity 282645 important
tag 282645 + upstream moreinfo help
thanks
On Tue, Nov 23, 2004 at 04:25:27PM +0100, Joost Kooij wrote:
> Package: xserver-xfree86
> Architecture: i386
> Version: 4.3.0.dfsg.1-8
>
> Hi,
>
> The xserver-xfree86 nv module crashes on my no-name Nvidia TNT2 64 card.
>
> Included below is:
> -backtrace obtained from xserver-xfree86-dbg package;
> -/var/log/XFree86.log
>
> If you need more information from me, just ask.
Thank you for the detailed report!
It would be nice to have your XF86Config-4, just for completeness.
I assume from the title of your report that the problem goes away if you
specify 'Option "NoAccel"' in the "Device" section of your XF86Config-4?
Here's the relevant part of the source code:
117 /* There is a HW race condition with videoram command buffers.
118 You can't jump to the location of your put offset. We write put
119 at the jump offset + SKIPS dwords with noop padding in between
120 to solve this problem */
121 #define SKIPS 8
122
123 void
124 NVDmaWait (
125 NVPtr pNv,
126 int size
127 ){
128 int dmaGet;
129
130 size++;
131
132 while(pNv->dmaFree < size) {
133 dmaGet = READ_GET(pNv);
134
135 if(pNv->dmaPut >= dmaGet) {
136 pNv->dmaFree = pNv->dmaMax - pNv->dmaCurrent;
137 if(pNv->dmaFree < size) {
138 NVDmaNext(pNv, 0x20000000);
139 if(dmaGet <= SKIPS) {
140 if(pNv->dmaPut <= SKIPS) /* corner case - will be idle */
141 WRITE_PUT(pNv, SKIPS + 1);
142 do { dmaGet = READ_GET(pNv); }
143 while(dmaGet <= SKIPS);
144 }
145 WRITE_PUT(pNv, SKIPS);
146 pNv->dmaCurrent = pNv->dmaPut = SKIPS;
147 pNv->dmaFree = dmaGet - (SKIPS + 1);
148 }
149 } else
150 pNv->dmaFree = dmaGet - pNv->dmaCurrent - 1;
151 }
152 }
This sort of problem is way over my head. Tagging "help".
> (gdb) bt full
> #0 0x080de288 in NVDmaWait (pNv=0x8b6c060, size=2) at nv_xaa.c:138
> dmaGet = 0
> #1 0x080def8f in NVSetupForMono8x8PatternFill (pScrn=0x8b6bb68, patternx=-289677961, patterny=-289677961, fg=-16777216, bg=-1,
> rop=3, planemask=4278190080) at nv_xaa.c:390
> pNv = 0x8b6c060
> #2 0x08382def in XAAFillMono8x8PatternRectsScreenOrigin (pScrn=0x8b6bb68, fg=0, bg=16777215, rop=3, planemask=4294967295,
> nBox=1, pBox=0xbffffcf0, pattern0=-289677961, pattern1=-289677961, xorigin=0, yorigin=0) at xaaFillRect.c:438
> infoRec = 0x8b6e860
> patx = -289677961
> paty = -289677961
> xorg = -289677961
> yorg = -289677961
> #3 0x083907e3 in XAAPaintWindow (pWin=0x8b9e790, prgn=0xbffffcf0, what=0) at xaaPaintWin.c:137
> pPriv = 0x8c5caac
> NoCache = 0
> xorg = 0
> pBgWin = 0x8b9e790
> yorg = 0
> pScreen = 0x8b6d968
> infoRec = 0x8b6e860
> nBox = 1
> pBox = 0xbffffcf0
> fg = -1
> pPix = 0x8c5ca78
> #4 0x0863a5c9 in miSpritePaintWindowBackground (pWin=0x8b9e790, pRegion=0xbffffcf0, what=0) at misprite.c:845
> pScreen = 0x8b6d968
> pScreenPriv = 0x8b81990
> #5 0x0861c489 in miWindowExposures (pWin=0x8b9e790, prgn=0xbffffcf0, other_exposed=0x0) at miexpose.c:536
> expRec = {extents = {x1 = 0, y1 = 0, x2 = -848, y2 = -16385}, data = 0x8c5ca78}
> clientInterested = 0
> exposures = 0xbffffcf0
> #6 0x0849ee99 in xf86XVWindowExposures (pWin=0x8b9e790, reg1=0xbffffcf0, reg2=0x0) at xf86xv.c:1035
> pScreen = 0x8b6d968
> ScreenPriv = 0x8b80f38
> WinPriv = 0x0
> pPrev = 0xbffffcc0
> pPriv = 0x0
> AreasExposed = 0
> #7 0x08507fad in MapWindow (pWin=0x8b9e790, client=0x8b5eb60) at window.c:2867
> temp = {extents = {x1 = 0, y1 = 0, x2 = 640, y2 = 480}, data = 0x0}
> pScreen = 0x8b6d968
> pParent = 0x0
> dosave = 0
> pLayerWin = 0x8b9e1f0
> #8 0x08503394 in InitRootWindow (pWin=0x8b9e790) at window.c:520
> pScreen = 0x8b6d968
> #9 0x084f5862 in main (argc=1, argv=0xbffffe34, envp=0xbffffe3c) at main.c:454
> i = 0
> j = 2
> k = 2
> error = -1208181990
> xauthfile = 0x0
> alwaysCheckForInput = {0, 1}
> (gdb) The program is running. Exit anyway? (y or n) y
--
G. Branden Robinson | I'm a firm believer in not drawing
Debian GNU/Linux | trend lines before you have data
branden@debian.org | points.
http://people.debian.org/~branden/ | -- Tim Ottinger
Attachment:
signature.asc
Description: Digital signature