Created attachment 61731 [details] xorg.log HW: AMD A3870K, GPU 6550D on-CPU. System: Gentoo ~amd64 How to reproduce: 1) let system start with activated kwin OpenGL effects 2) press ALT-F11 (de/activate effects) (with combination with Chrome or Firefox is best for fast reproduce) 3) after few presses xorg die. Dmesg here, xorg with -O0 and -ggdb etc. in attachment. $ dmesg | grep drm -C2 ACPI: acpi_idle registered with cpuidle Linux agpgart interface v0.103 [drm] Initialized drm 1.1.0 20060810 [drm] radeon defaulting to kernel modesetting. [drm] radeon kernel modesetting enabled. [drm] initializing kernel modesetting (SUMO 0x1002:0x9640 0x1043:0x84C8). [drm] register mmio base: 0xFEB00000 [drm] register mmio size: 262144 ATOM BIOS: General radeon 0000:00:01.0: VRAM: 256M 0x0000000000000000 - 0x000000000FFFFFFF (256M used) radeon 0000:00:01.0: GTT: 512M 0x0000000010000000 - 0x000000002FFFFFFF [drm] Detected VRAM RAM=256M, BAR=256M [drm] RAM width 32bits DDR [TTM] Zone kernel: Available graphics memory: 3951330 kiB [TTM] Zone dma32: Available graphics memory: 2097152 kiB [TTM] Initializing pool allocator [TTM] Initializing DMA pool allocator [drm] radeon: 256M of VRAM memory ready [drm] radeon: 512M of GTT memory ready. [drm] Supports vblank timestamp caching Rev 1 (10.10.2010). [drm] Driver supports precise vblank timestamp query. radeon 0000:00:01.0: irq 42 for MSI/MSI-X radeon 0000:00:01.0: radeon: using MSI. [drm] radeon: irq initialized. [drm] GART: num cpu pages 131072, num gpu pages 131072 [drm] radeon: ib pool ready. [drm] Loading SUMO Microcode [drm] PCIE GART of 512M enabled (table at 0x0000000000040000). radeon 0000:00:01.0: WB enabled [drm] fence driver on ring 0 use gpu addr 0x10000c00 and cpu addr 0xffff8802244a3c00 [drm] ring test on 0 succeeded in 1 usecs [drm] ib test on ring 0 succeeded in 0 usecs [drm] Radeon Display Connectors [drm] Connector 0: [drm] VGA [drm] HPD2 [drm] DDC: 0x6440 0x6440 0x6444 0x6444 0x6448 0x6448 0x644c 0x644c [drm] Encoders: [drm] CRT1: INTERNAL_UNIPHY2 [drm] CRT1: NUTMEG [drm] Connector 1: [drm] DVI-D [drm] HPD1 [drm] DDC: 0x6430 0x6430 0x6434 0x6434 0x6438 0x6438 0x643c 0x643c [drm] Encoders: [drm] DFP1: INTERNAL_UNIPHY2 [drm] Connector 2: [drm] DisplayPort [drm] HPD3 [drm] DDC: 0x6450 0x6450 0x6454 0x6454 0x6458 0x6458 0x645c 0x645c [drm] Encoders: [drm] DFP2: INTERNAL_UNIPHY [drm] Internal thermal controller without fan control [drm] radeon: power management initialized [drm] fb mappable at 0xC0142000 [drm] vram apper at 0xC0000000 [drm] size 8294400 [drm] fb depth is 24 [drm] pitch is 7680 fbcon: radeondrmfb (fb0) is primary device Console: switching to colour frame buffer device 240x67 fb0: radeondrmfb frame buffer device drm: registered panic notifier [drm] Initialized radeon 2.15.0 20080528 for 0000:00:01.0 on minor 0
Can you get a full backtrace with gdb?
Created attachment 61735 [details] gdb I'm afraid it didn't bring needed information. It look like without debug. I have suspicion, that some lower level package is compiled with omit-frame-pointer :(
It always die in dri2_*. In this moment was hard to get it crash, but combination of kwin effects (OpenGL2 Shaders) + VLC with opengl visualisation ProjectM (gdb) c Continuing. Program received signal SIGSEGV, Segmentation fault. 0x00007f341c93bd62 in dri2_invalidate_drawable (dPriv=0x2d59490) at dri2.c:68 68 dri2.c: No such file or directory. (gdb) bt #0 0x00007f341c93bd62 in dri2_invalidate_drawable (dPriv=0x2d59490) at dri2.c:68 #1 0x00007f341f0e3d85 in __glXDRIinvalidateBuffers (pDraw=0x37062d0, priv=0x36e3ca0, id=23087722) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/glx/glxdri2.c:427 #2 0x00007f341e845ffb in DRI2InvalidateDrawable (pDraw=0x37062d0) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/hw/xfree86/dri2/dri2.c:598 #3 0x00007f341e8467b6 in DRI2InvalidateWalk (pWin=0x37062d0, data=0x2859cc0) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/hw/xfree86/dri2/dri2.c:844 #4 0x00000000004761e8 in TraverseTree (pWin=0x285b130, func=0x7f341e84676f <DRI2InvalidateWalk>, data=0x2859cc0) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/dix/window.c:315 #5 0x00007f341e846bf1 in DRI2SwapBuffers (client=0x356c980, pDraw=0x2ae0820, target_msc=0, divisor=0, remainder=0, swap_target=0x7fff05dcf1c0, func=0x7f341e848126 <DRI2SwapEvent>, data=0x2ae0820) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/hw/xfree86/dri2/dri2.c:964 #6 0x00007f341e8482bd in ProcDRI2SwapBuffers (client=0x356c980) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/hw/xfree86/dri2/dri2ext.c:400 #7 0x00007f341e8487d3 in ProcDRI2Dispatch (client=0x356c980) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/hw/xfree86/dri2/dri2ext.c:566 #8 0x000000000043436f in Dispatch () at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/dix/dispatch.c:428 #9 0x0000000000425152 in main (argc=10, argv=0x7fff05dcf3b8, envp=0x7fff05dcf410) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/dix/main.c:288 (gdb) bt full #0 0x00007f341c93bd62 in dri2_invalidate_drawable (dPriv=0x2d59490) at dri2.c:68 drawable = 0x2b12190 #1 0x00007f341f0e3d85 in __glXDRIinvalidateBuffers (pDraw=0x37062d0, priv=0x36e3ca0, id=23087722) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/glx/glxdri2.c:427 private = 0x36e3ca0 screen = 0x2832f60 #2 0x00007f341e845ffb in DRI2InvalidateDrawable (pDraw=0x37062d0) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/hw/xfree86/dri2/dri2.c:598 pPriv = 0x3566d60 ref = 0x3592860 #3 0x00007f341e8467b6 in DRI2InvalidateWalk (pWin=0x37062d0, data=0x2859cc0) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/hw/xfree86/dri2/dri2.c:844 No locals. #4 0x00000000004761e8 in TraverseTree (pWin=0x285b130, func=0x7f341e84676f <DRI2InvalidateWalk>, data=0x2859cc0) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/dix/window.c:315 result = 1 pChild = 0x37062d0 #5 0x00007f341e846bf1 in DRI2SwapBuffers (client=0x356c980, pDraw=0x2ae0820, target_msc=0, divisor=0, remainder=0, swap_target=0x7fff05dcf1c0, func=0x7f341e848126 <DRI2SwapEvent>, data=0x2ae0820) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/hw/xfree86/dri2/dri2.c:964 pWin = 0x285b130 pPixmap = 0x2859cc0 pScreen = 0x2801d80 ds = 0x28022a0 pPriv = 0x2f839a0 pDestBuffer = 0x31779b0 pSrcBuffer = 0x3261390 ret = 1 i = 3 ust = 1338738147972846 current_msc = 423256 __func__ = "DRI2SwapBuffers" #6 0x00007f341e8482bd in ProcDRI2SwapBuffers (client=0x356c980) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/hw/xfree86/dri2/dri2ext.c:400 stuff = 0x35b0660 rep = {type = 0 '\000', pad1 = 0 '\000', sequenceNumber = 0, length = 0, swap_hi = 56019328, swap_lo = 0, pad2 = 98365936, pad3 = 32767, pad4 = 56019328, pad5 = 0} pDrawable = 0x2ae0820 target_msc = 0 divisor = 0 remainder = 0 swap_target = 403 status = 0 #7 0x00007f341e8487d3 in ProcDRI2Dispatch (client=0x356c980) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/hw/xfree86/dri2/dri2ext.c:566 stuff = 0x35b0660 #8 0x000000000043436f in Dispatch () at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/dix/dispatch.c:428 clientReady = 0x29a7690 result = 0 ---Type <return> to continue, or q <return> to quit--- client = 0x356c980 nready = 0 icheck = 0x86d110 start_tick = 6740 #9 0x0000000000425152 in main (argc=10, argv=0x7fff05dcf3b8, envp=0x7fff05dcf410) at /var/tmp/portage/x11-base/xorg-server-1.12.2/work/xorg-server-1.12.2/dix/main.c:288 i = 1 alwaysCheckForInput = {0, 1}
Created attachment 62655 [details] [review] Possible workaround (In reply to comment #3) > #0 0x00007f341c93bd62 in dri2_invalidate_drawable (dPriv=0x2d59490) at > dri2.c:68 Can you print *dPriv here? This patch might work around the crash, but I don't understand how dri_drawable() can ever return NULL...
After more investigation, I think I found the problem and fix in the xserver GLX code: http://lists.x.org/archives/xorg-devel/2012-June/032008.html
*** Bug 51626 has been marked as a duplicate of this bug. ***
*** Bug 51980 has been marked as a duplicate of this bug. ***
I didn't found it applied in xserver git repository, what is status? Chris confirmed it work, right? Is needed more testing?
Tested-by: David Heidelberger <d.okias at gmail.com> seems ROCK STABLE :D fixed for me, just get it into git and 1.12.4
I had to adapt the fix to review comments, but it's in Git master now, see below. Hopefully it'll be backported to the 1.12 branch as well. commit a2d0829531249e24dbca25fc20ed30a2bb2d8ed8 Author: Michel Dänzer <michel.daenzer@amd.com> Date: Thu Jul 12 13:16:37 2012 +0200 glx: Free DRI2 drawable reference to destroyed GLX drawable. Otherwise the reference can lead to use after free in __glXDRIinvalidateBuffers().
*** Bug 52190 has been marked as a duplicate of this bug. ***
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.