mach64 broken with xserver 1.13 ?

Alan Coopersmith alan.coopersmith at oracle.com
Thu Dec 6 15:23:46 PST 2012


On 11/18/12 11:25 PM, Connor Behan wrote:
> On 18/11/12 12:00 PM, xorg-devel-request at lists.x.org wrote:
>>> I'm seeing the xf86-video-mach64 6.9.3 crashing with xserver 1.13 on
>>> OpenBSD, both on sparc64 and intel (x86_64) machines.
>>>
>>> here's some debugging information. Apparently something in devPrivate
>>> doesn't get initialized properly, but I'm not able to figure out
>>> what. Any suggestion ?
>> I'd bet its a long standing exa bug somewhere or maybe a mach64 exa
>> specific problem. Since on previous servers mach64 would default to
>> XAA, but that got removed. Dave.
> This summer I suspected that such a bug would hit mach64 so I made this
> patch: https://bugs.freedesktop.org/show_bug.cgi?id=51137 I didn't push
> to get it accepted because I couldn't test it and I was having a hard
> enough time working on the patch I could test.

Unfortunately, that patch doesn't seem to be enough here - it gets past
the crash initializing the root window, but crashes later bringing up
GNOME in another place it seems to be trying to access pixmap data
directly:

  ---- called from signal handler with signal 11 (SIGSEGV) ------
=>[14] Mach64PixelARGB(pPixmap = 0x1d32820, format = 537004168U, argb =
0xffff80ffbfffcc60), line 219 in "atimach64render.c"
  [15] Mach64PrepareMask(m3d = 0xc81750, op = 8, pSrcPicture = 0x1d32a10,
pMaskPicture = 0x1d314e0, pSrc = 0x1d32820, pMask = 0x1e1b300), line 504 in
"atimach64render.c"
  [16] Mach64PrepareComposite(op = 8, pSrcPicture = 0x1d32a10, pMaskPicture =
0x1d314e0, pDstPicture = 0x1d31190, pSrc = 0x1d32820, pMask = 0x1e1b300, pDst =
0x1dfe5c0), line 706 in "atimach64render.c"
  [17] exaTryDriverComposite(op = '\b', pSrc = 0x1d32a10, pMask = 0x1d314e0,
pDst = 0x1d31190, xSrc = 1194, ySrc = 5, xMask = 0, yMask = 0, xDst = 1194, yDst
= 5, width = 79U, height = 11U), line 746 in "exa_render.c"
  [18] exaComposite(op = '\b', pSrc = 0x1d32a10, pMask = 0x1d314e0, pDst =
0x1d31190, xSrc = 1194, ySrc = 5, xMask = 0, yMask = 0, xDst = 1194, yDst = 5,
width = 79U, height = 11U), line 1008 in "exa_render.c"
  [19] exaTryMagicTwoPassCompositeHelper(op = '\003', pSrc = 0x1d32a10, pMask =
0x1d314e0, pDst = 0x1d31190, xSrc = 1194, ySrc = 5, xMask = 0, yMask = 0, xDst =
1194, yDst = 5, width = 79U, height = 11U), line 855 in "exa_render.c"
  [20] exaComposite(op = '\003', pSrc = 0x1d32a10, pMask = 0x1d314e0, pDst =
0x1d31190, xSrc = 1194, ySrc = 5, xMask = 0, yMask = 0, xDst = 1194, yDst = 5,
width = 79U, height = 11U), line 1029 in "exa_render.c"
  [21] damageComposite(op = '\003', pSrc = 0x1d32a10, pMask = 0x1d314e0, pDst =
0x1d31190, xSrc = 1194, ySrc = 5, xMask = 0, yMask = 0, xDst = 1194, yDst = 5,
width = 79U, height = 11U), line 563 in "damage.c"
  [22] CompositePicture(op = '\003', pSrc = 0x1d32a10, pMask = 0x1d314e0, pDst =
0x1d31190, xSrc = 1194, ySrc = 5, xMask = 0, yMask = 0, xDst = 1194, yDst = 5,
width = 79U, height = 11U), line 1615 in "picture.c"
  [23] exaGlyphs(op = '\003', pSrc = 0x1d32a10, pDst = 0x1d31190, maskFormat =
0xc84ce8, xSrc = 1194, ySrc = 15, nlist = -1, list = 0xffff80ffbffff660, glyphs
= 0xffff80ffbfffee90), line 835 in "exa_glyphs.c"
  [24] damageGlyphs(op = '\003', pSrc = 0x1d32a10, pDst = 0x1d31190, maskFormat
= 0xc84ce8, xSrc = 1194, ySrc = 15, nlist = 2, list = 0xffff80ffbffff640, glyphs
= 0xffff80ffbfffee30), line 625 in "damage.c"
  [25] CompositeGlyphs(op = '\003', pSrc = 0x1d32a10, pDst = 0x1d31190,
maskFormat = 0xc84ce8, xSrc = 1194, ySrc = 15, nlist = 2, lists =
0xffff80ffbffff640, glyphs = 0xffff80ffbfffee30), line 559 in "glyph.c"
  [26] ProcRenderCompositeGlyphs(client = 0x12c21f0), line 1394 in "render.c"
  [27] ProcRenderDispatch(client = 0x12c21f0), line 1989 in "render.c"
  [28] Dispatch(), line 433 in "dispatch.c"
  [29] main(argc = 8, argv = 0xffff80ffbffffba8, envp = 0xffff80ffbffffbf0),
line 343 in "main.c"

(dbx) list
  215     /* exaGetPixmapFirstPixel() */
  216
  217     switch (pPixmap->drawable.bitsPerPixel) {
  218     case 32:
  219           pixel = *(CARD32 *)(pPixmap->devPrivate.ptr);
  220           break;
  221       case 16:
  222           pixel = *(CARD16 *)(pPixmap->devPrivate.ptr);
  223           break;
  224       default:
  225           pixel = *(CARD8 *)(pPixmap->devPrivate.ptr);
  226           break;
  227       }
  228
(dbx) print pPixmap
pPixmap = 0x1d32820
(dbx) print *pPixmap
*pPixmap = {
    drawable      = {
        type         = '\001'
        class        = '\0'
        depth        = '\030'
        bitsPerPixel = ' '
        id           = 23068727U
        x            = 0
        y            = 0
        width        = 1U
        height       = 1U
        pScreen      = 0xc84310
        serialNumber = 237U
    }
    devPrivates   = 0x1d32868
    refcnt        = 3
    devKind       = 64
    devPrivate    = {
        ptr  = (nil)
        val  = 0
        uval = 0
        fptr = (nil)
    }
    screen_x      = 0
    screen_y      = 0
    usage_hint    = 0
    master_pixmap = 0xe0db40
}

For now, I've just added --disable-exa to the build flags for our mach64
package.


-- 
	-Alan Coopersmith-              alan.coopersmith at oracle.com
	 Oracle Solaris Engineering - http://blogs.oracle.com/alanc


More information about the xorg-devel mailing list