Bug 73619

Summary: XServer frequently freezes for a few seconds
Product: Mesa Reporter: Alexander Richardson <arichardson.kde>
Component: Drivers/Gallium/r600Assignee: Default DRI bug account <dri-devel>
Status: RESOLVED MOVED QA Contact:
Severity: normal    
Priority: medium CC: b.bellec
Version: 10.0   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:
Attachments: logs

Description Alexander Richardson 2014-01-14 17:38:43 UTC
The XServer randomly freezes for a few seconds or sometimes even 1-2 minutes. I cannot move the mouse, and the screen does not update.

I have a HD4850 card running on a 
3.12.6-1.g080d0df-desktop SMP PREEMPT x86_64 kernel with Mesa 10.0.1 (both from openSuSE packages). These freezes also happen with the default 3.11 kernel, I upgraded in the hope of it being fixed, but the issue is still present.

These issues started after the upgrade to openSuSE 13.1 which has a 3.11 kernel instead of the previous 3.7 kernel. The Mesa version did not change, I was always running the latest released version. My guess is it has something to do with the r600 kernel changes in 3.8+.

During these freeze periods I can ssh into my system and top shows no CPU usage, so the XServer seems to be sleeping instead of being in a busy loop.
dmesg gives me no messages and /var/log/XOrg.0.log is also empty.

I don't know how to get any more detailed logging output. If you provide me with the necessary environment variables/kernel parameters I will give you these logs.

Not sure if this helps, but most of the time the freeze happens when I open a new tab in firefox or switch to a different one. However it also happens at random intervals using other programs.
It can sometimes take quite a long time until this freeze happens, however once it has occured once, it usually happens again after a short timespan (1-2 minutes or even less).

Is it possible to debug the XServer just like a normal program using gdb? If yes I will try to provide a useful backtrace once the next longer freeze happens
Comment 1 Alex Deucher 2014-01-14 18:41:30 UTC
Please attach your xorg log and dmesg output.  Any chance you could bisect?
Comment 2 Alexander Richardson 2014-01-14 21:06:10 UTC
Created attachment 92092 [details]
logs

Bisecting is quite tricky, I have so far only used the binary kernel packages. 
I can try, however it will probably take a long time until I find something useful if at all. I am not sure when I can call a version good because sometimes the system can run fine for multiple hours and only then start having these freezes.
I currently don't have the time to bisect, so I was hoping there would be some kernel parameters to increase verbosity.

Would running a debug kernel be of any use?
Comment 3 Alexander Richardson 2014-01-20 13:05:12 UTC
I have now upgraded to Mesa 10.0.2 and it is MUCH better. Freeze only happens very rarely now. Maybe some unrelated change made a race condition that causes this very unlikely. Sadly still don't have the time to bisect the kernel.
Comment 4 Alexander Richardson 2014-03-18 11:53:05 UTC
I recently had another freeze and was able to attach gdb via ssh, this is the backtrace I got:

Thread 2 (Thread 0x7fca267f1980 (LWP 868)):
#0  0x00007fca247161e7 in ioctl () at ../sysdeps/unix/syscall-template.S:81
No locals.
#1  0x00007fca257e1da4 in drmIoctl (fd=10, request=request@entry=3223348317, arg=arg@entry=0x7fff56fbe6b0) at xf86drm.c:167
        ret = <optimized out>
#2  0x00007fca257e414f in drmCommandWriteRead (fd=<optimized out>, drmCommandIndex=drmCommandIndex@entry=29, data=data@entry=0x7fff56fbe6b0, size=size@entry=32) at xf86drm.c:2451
        request = 3223348317
#3  0x00007fca1ff12463 in bo_open (bom=0x1ba44e0, handle=0, size=121397248, alignment=512, domains=4, flags=0) at radeon_bo_gem.c:108
        args = {
          size = 121397248, 
          alignment = 512, 
          handle = 1737, 
          initial_domain = 4, 
          flags = 0
        }
        bo = 0x2a4f140
        r = <optimized out>
#4  0x00007fca20169e08 in radeon_alloc_pixmap_bo (pScrn=pScrn@entry=0x1b9aca0, width=width@entry=3648, height=height@entry=8172, depth=depth@entry=32, usage_hint=usage_hint@entry=0, bitsPerPixel=bitsPerPixel@entry=32, new_pitch=new_pitch@entry=0x7fff56fbf55c, new_surface=new_surface@entry=0x2ae6600, new_tiling=new_tiling@entry=0x2ae65f8) at radeon_bo_helper.c:179
        info = 0x1b9b3d0
        pitch = 14848
        base_align = <optimized out>
        size = <optimized out>
        heighta = <optimized out>
        cpp = 4
        tiling = 0
        surface = {
          npix_x = 3648, 
          npix_y = 8176, 
          npix_z = 1, 
          blk_w = 1, 
          blk_h = 1, 
          blk_d = 1, 
          array_size = 1, 
          last_level = 0, 
          bpe = 4, 
          nsamples = 1, 
          flags = 1114113, 
          bo_size = 121397248, 
          bo_alignment = 512, 
          bankw = 0, 
          bankh = 0, 
          mtilea = 0, 
          tile_split = 0, 
          stencil_tile_split = 0, 
          stencil_offset = 0, 
          level = {{
              offset = 0, 
              slice_size = 121397248, 
              npix_x = 3648, 
              npix_y = 8176, 
              npix_z = 1, 
              nblk_x = 3712, 
              nblk_y = 8176, 
              nblk_z = 1, 
              pitch_bytes = 14848, 
              mode = 0
            }, {
              offset = 0, 
              slice_size = 0, 
              npix_x = 0, 
              npix_y = 0, 
              npix_z = 0, 
              nblk_x = 0, 
              nblk_y = 0, 
              nblk_z = 0, 
              pitch_bytes = 0, 
              mode = 0
            } <repeats 31 times>}, 
          stencil_level = {{
              offset = 0, 
              slice_size = 0, 
              npix_x = 0, 
              npix_y = 0, 
              npix_z = 0, 
              nblk_x = 0, 
              nblk_y = 0, 
              nblk_z = 0, 
              pitch_bytes = 0, 
              mode = 0
            } <repeats 32 times>}, 
          tiling_index = {0 <repeats 32 times>}, 
          stencil_tiling_index = {0 <repeats 32 times>}
        }
        bo = <optimized out>
        domain = 4
#5  0x00007fca2013c527 in RADEONEXACreatePixmap2 (pScreen=<optimized out>, width=3648, height=8172, depth=32, usage_hint=0, bitsPerPixel=32, new_pitch=0x7fff56fbf55c) at radeon_exa.c:289
        pScrn = 0x1b9aca0
        info = <optimized out>
        new_priv = 0x2ae65f0
#6  0x00007fca1fd00068 in exaCreateDriverPixmap_mixed (pPixmap=0x2da61c0) at exa_migration_mixed.c:61
        new_pitch = 0
        pScreen = 0x1ba3b20
        w = <optimized out>
        h = 8172
        depth = <optimized out>
        bpp = <optimized out>
        usage_hint = 0
        paddedWidth = 14592
#7  0x00007fca1fd002b0 in exaDoMigration_mixed (pixmaps=0x7fff56fbf660, npixmaps=-1071618979, can_accel=535884672) at exa_migration_mixed.c:104
        pPixmap = 0x2da61c0
#8  0x00007fca1fd00dd4 in exaDoPutImage (depth=32, src_stride=14592, bits=0x36b7dc8 "", format=2, h=17, w=3648, y=0, x=0, pGC=0x20cc090, pDrawable=0x2da61c0) at exa_accel.c:179
        pixmaps = {{
            as_dst = 1, 
            as_src = 0, 
            pPix = 0x2da61c0, 
            pReg = 0x58
          }}
        nbox = <optimized out>
        pPix = <optimized out>
        xoff = 0
        ret = 1
        pClip = <optimized out>
        pbox = <optimized out>
        yoff = 1
        bpp = 32
#9  exaPutImage (pDrawable=0x2da61c0, pGC=0x20cc090, depth=32, x=0, y=0, w=3648, h=17, leftPad=0, format=2, bits=0x36b7dc8 "") at exa_accel.c:233
No locals.
#10 0x0000000000519819 in damagePutImage (pDrawable=0x2da61c0, pGC=0x20cc090, depth=32, x=0, y=0, w=<optimized out>, h=17, leftPad=0, format=2, pImage=0x36b7dc8 "") at damage.c:736
        oldFuncs = 0x8162c0 <damageGCFuncs>
#11 0x000000000043a189 in ProcPutImage (client=0x2a4d3f0) at dispatch.c:1968
        pGC = 0x20cc090
        pDraw = 0x2da61c0
        length = <optimized out>
        lengthProto = <optimized out>
        tmpImage = 0x36b7dc8 ""
        stuff = 0x36b7db0
#12 0x000000000043d23e in Dispatch () at dispatch.c:433
        clientReady = 0x1f600c0
        result = <optimized out>
        client = 0x2a4d3f0
        nready = 0
        icheck = 0x820590 <checkForInput>
        start_tick = 178795
#13 0x000000000044106a in dix_main (argc=8, argv=0x7fff56fbf948, envp=<optimized out>) at main.c:294
        i = <optimized out>
        alwaysCheckForInput = {0, 1}
#14 0x00007fca24657be5 in __libc_start_main (main=0x42c5d0 <main>, argc=8, argv=0x7fff56fbf948, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fff56fbf938) at libc-start.c:269
        result = <optimized out>
        unwind_buf = {
          cancel_jmp_buf = {{
              jmp_buf = {0, -524547331697071748, 4376024, 140734652741952, 0, 0, 524320866477091196, 516830052716587388}, 
              mask_was_saved = 0
            }}, 
          priv = {
            pad = {0x0, 0x0, 0x59b9b0 <__libc_csu_init>, 0x7fff56fbf948}, 
            data = {
              prev = 0x0, 
              cleanup = 0x0, 
              canceltype = 5880240
            }
          }
        }
        not_first_call = <optimized out>
#15 0x000000000042c601 in _start () at ../sysdeps/x86_64/start.S:122
No locals.

Thread 1 (Thread 0x7fca19dfe700 (LWP 883)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
No locals.
#1  0x00007fca1f515ec3 in ?? () from /usr/lib64/dri/r600_dri.so
No symbol table info available.
#2  0x00007fca1f515807 in ?? () from /usr/lib64/dri/r600_dri.so
No symbol table info available.
#3  0x00007fca259f20db in start_thread (arg=0x7fca19dfe700) at pthread_create.c:309
        __res = <optimized out>
        pd = 0x7fca19dfe700
        now = <optimized out>
        unwind_buf = {
          cancel_jmp_buf = {{
              jmp_buf = {140505994225408, -524547331697071748, 0, 140506206253056, 140506085630131, 140505994225408, 516890606489905532, 516829586942404988}, 
              mask_was_saved = 0
            }}, 
          priv = {
            pad = {0x0, 0x0, 0x0, 0x0}, 
            data = {
              prev = 0x0, 
              cleanup = 0x0, 
              canceltype = 0
            }
          }
        }
        not_first_call = <optimized out>
        pagesize_m1 = <optimized out>
        sp = <optimized out>
        freesize = <optimized out>
        __PRETTY_FUNCTION__ = "start_thread"
#4  0x00007fca2471d90d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
No locals.



Looks like it is somehow freezing when calling the DRM_RADEON_GEM_CREATE ioctl, but maybe gdb attaching causes the freeze to end and this is just afterwards.
Hope it is of some use.
Comment 5 Benjamin Bellec 2014-03-19 20:27:05 UTC
Does the freeze happens also with the stock openSUSE mesa (9.2.2)?
Comment 6 GitLab Migration User 2019-09-18 19:12:48 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/mesa/mesa/issues/484.

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.