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