On Thu, May 2, 2013 at 5:55 AM, Aaron Plattner <[email protected]> wrote: > On 04/30/2013 11:30 PM, Dave Airlie wrote: >> On Wed, May 1, 2013 at 7:14 AM, Aaron Plattner <[email protected]> wrote: >>> Commit 8f4640bdb9d3988148e09a08d2c7e3bab1d538d6 fixed a bit of a >>> chicken-and-egg problem by detaching GPU screens when their providers >>> are destroyed, which happens before CloseScreen is called. However, >>> this created a new problem: the GPU screen tears down its RandR crtc >>> objects during CloseScreen and if one of them is active, it tries to >>> detach the scanout pixmap then. This crashes because >>> RRCrtcDetachScanoutPixmap tries to get the master screen's screen >>> pixmap, but crtc->pScreen->current_master is already NULL at that >>> point. >>> >>> It doesn't make sense for an unbound GPU screen to still be scanning >>> out its former master screen's pixmap, so detach them first when the >>> provider is destroyed. >> >> Any instructions on how to reproduce this? I've been trying to get it >> to happen here. > > 1. Start X on an Intel system with a DisplayLink device attached. > 2. xrandr --setprovideroutputsource 1 0 > 3. xrandr --output DVI-0 --off (unless you apply "xfree86: don't enable > anything in xf86InitialConfiguration for GPU screens") > 4. xrandr --auto > 5. Terminate the X server. > > Program received signal SIGSEGV, Segmentation fault. > 0x8010be62 in RRCrtcDetachScanoutPixmap (crtc=crtc@entry=0x80259740) at > ../../randr/rrcrtc.c:370 > 370 ../../randr/rrcrtc.c: No such file or directory. > (gdb) bt > #0 0x8010be62 in RRCrtcDetachScanoutPixmap (crtc=crtc@entry=0x80259740) at > ../../randr/rrcrtc.c:370 > #1 0x8010bfab in RRCrtcDestroyResource (value=0x80259740, pid=63) at > ../../randr/rrcrtc.c:678 > #2 0x80062fbe in doFreeResource (res=0x8025bc58, skip=skip@entry=0) at > ../../dix/resource.c:873 > #3 0x8006415b in FreeClientResources (client=0x8023f350) at > ../../dix/resource.c:1139 > #4 0x800641fc in FreeAllResources () at ../../dix/resource.c:1154 > #5 0x8002b556 in main (argc=3, argv=0xbffff704, envp=0xbffff714) at > ../../dix/main.c:321 > (gdb) p crtc->pScreen->current_master > $1 = (ScreenPtr) 0x0 > (gdb) p crtc->pScreen->myNum > $2 = 256 > >> I did notice that xrandr is now broken for detach? how are you detaching btw? >> xrandr --setoutputprovidersource 0x67 0x0 should detach I would think, >> but it fails now. > > Yeah, I noticed that too, and hacked it up to allow me to test it. I'll try > to clean up the change for review. > > The crash doesn't occur at detach time or if I pull the USB cable.
I'm having absolutely no luck reproducing this with the X server master + my for-keithp tree pulled in. I'm not sure what I could be doing different than you are, I've even valgrinded it. Dave. _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
