On Tue, Apr 16, 2013 at 11:22 AM, Michel Dänzer <[email protected]> wrote:
> On Die, 2013-04-16 at 10:54 -0600, Daniel Drake wrote:
>> On Sat, Apr 13, 2013 at 11:14 AM, Chris Wilson <[email protected]> 
>> wrote:
>> > Given the same fix works, it does sound like a very similar issue. The
>> > difference is that the DDX is under control of the creating the scratch
>> > pixmap in your case and should be well aware of the lifetime constraints
>> > and so remember to decouple the GPU object when it destroys the screen
>> > pixmap. So the bug is really in the driver and this just happens to
>> > workaround the bug by forcing the release
>>
>> Good that you have a feeling for where the real problem actually is.
>> I'm happy to fix the driver, but I am facing a bit of a learning
>> curve. If I get a good grasp on things, I will try to produce some
>> documentation for the next person...
>>
>> So, the DDX is in control of pixmap allocations. It does that by
>> providing these hooks:
>>
>>     if (pExa->flags & EXA_HANDLES_PIXMAPS)
>>     {
>>         pExa->CreatePixmap       = NULL;
>>         pExa->CreatePixmap2      = mrvlExaCreatePixmap2;
>>         pExa->DestroyPixmap      = mrvlDestroyPixmap;
>>         pExa->ModifyPixmapHeader = mrvlModifyPixmapHeader;
>>         pExa->PixmapIsOffscreen  = mrvlPixmapIsOffscreen;
>>     }
>
> Do you really need the ModifyPixmapHeader hook? It shouldn't be
> necessary with CreatePixmap2. Do things work better without it?

Causes a crash early in X init. Maybe this has uncovered a driver bug?

Program received signal SIGSEGV, Segmentation fault.
0xb6c7ed9c in pixman_fill1_line (v=1, width=<optimized out>, offs=0,
    dst=<optimized out>) at pixman-fast-path.c:2057
2057    *dst |= A1_FILL_MASK (width, 0);
(gdb) bt
#0  0xb6c7ed9c in pixman_fill1_line (v=1, width=<optimized out>, offs=0,
    dst=<optimized out>) at pixman-fast-path.c:2057
#1  pixman_fill1 (xor=16, height=15, width=16, y=0, x=16,
    stride=<optimized out>, bits=<optimized out>) at pixman-fast-path.c:2079
#2  fast_path_fill (imp=<optimized out>, bits=<optimized out>,
    stride=<optimized out>, bpp=<optimized out>, x=0, y=0, width=16,
    height=16, xor=4294967295) at pixman-fast-path.c:2180
#3  0xb6c8bb24 in _pixman_implementation_fill (imp=0x1e0418,
    bits=bits@entry=0x0, stride=stride@entry=1, bpp=bpp@entry=1, x=x@entry=0,
    y=0, y@entry=3071080, width=16, width@entry=-1287741568, height=16,
    height@entry=0, xor=4294967295, xor@entry=16)
    at pixman-implementation.c:250
#4  0xb6c4e374 in pixman_fill (bits=bits@entry=0x0, stride=stride@entry=1,
    bpp=bpp@entry=1, x=x@entry=0, y=y@entry=0, width=width@entry=16,
    height=16, height@entry=-1287739640, xor=4294967295) at pixman.c:763
#5  0xb33e9f80 in fbFill (pDrawable=0x2ee0e8, pDrawable@entry=0x10,
    pGC=0x2edc68, pGC@entry=0x1fd268, x=-1225732320, x@entry=0, y=y@entry=0,
    width=width@entry=16, height=height@entry=16) at fbfill.c:43
#6  0xb33ea708 in fbPolyFillRect (pDrawable=0x10, pGC=0x1fd268,
    nrect=<optimized out>, prect=0xbe86d50c) at fbfillrect.c:72
#7  0xb33caa70 in ExaCheckPolyFillRect (pDrawable=pDrawable@entry=0x2ee0e8,
    pGC=pGC@entry=0x2edc68, nrect=nrect@entry=1, prect=prect@entry=0xbe86d504)
    at exa_unaccel.c:313
#8  0xb33c4a94 in exaPolyFillRect (pDrawable=0x2ee0e8, pGC=0x2edc68, nrect=1,
    prect=0xbe86d504) at exa_accel.c:849
#9  0x00129efc in damagePolyFillRect (pDrawable=0x2ee0e8, pGC=0x2edc68,
    nRects=1220348, pRects=0x2ee0e8) at damage.c:1250
#10 0x0004c308 in CreateDefaultStipple (screenNum=screenNum@entry=0)
    at gc.c:895
#11 0x000281c4 in main (argc=1, argv=0x281c4 <main+792>, envp=<optimized out>)
    at main.c:229

Thanks!
Daniel
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to