[DragonFlyBSD - Bug #3200] master: weston screen freezes
bugtracker-admin at leaf.dragonflybsd.org
bugtracker-admin at leaf.dragonflybsd.org
Wed Oct 30 02:39:07 PDT 2019
Issue #3200 has been updated by peeter.
I may have a theory about what is going on.
- "weston" is waiting for "drmev" which is owned by "ithread16 2"
- "ithread16 2" is waiting for "lwq" which is owned by "weston"
- It might seem that there is a slight confusion with the latter statement.
This is because the lockholder of "lwq" has td_comm = "weston launch", not
"weston". But this seems incorrect because its p_pid = 1064, which is
"weston". Also, its p_ppid = 1063 "weston launch". This is consistent with
the fact that weston-launch creates weston as its child process.
---
369 pid 1063/1, weston-launch 0xffffffff80653d36 in lwkt_switch () at /usr/src/sys/kern/lwkt_thread.c:810
338 pid 1064/1, weston 0xffffffff80653d36 in lwkt_switch () at /usr/src/sys/kern/lwkt_thread.c:810
164 kernel ithread16 2 0xffffffff80653d36 in lwkt_switch () at /usr/src/sys/kern/lwkt_thread.c:810
---
(kgdb) thread 338
[Switching to thread 338 (pid 1064/1, weston)]
#0 0xffffffff80653d36 in lwkt_switch () at /usr/src/sys/kern/lwkt_thread.c:810
810 lwkt_switch_return(td->td_switch(ntd));
(kgdb) bt
#0 0xffffffff80653d36 in lwkt_switch () at /usr/src/sys/kern/lwkt_thread.c:810
#1 0xffffffff80660ece in tsleep (ident=ident at entry=0xfffff801e0654e70, flags=flags at entry=1024, wmesg=<optimized out>, timo=timo at entry=0) at /usr/src/sys/kern/kern_synch.c:707
#2 0xffffffff8062e27d in lockmgr_exclusive (lkp=lkp at entry=0xfffff801e0654e70, flags=flags at entry=2) at /usr/src/sys/kern/kern_lock.c:381
#3 0xffffffff837a3b06 in lockmgr (flags=2, lkp=0xfffff801e0654e70) at @/sys/lock.h:271
#4 spin_lock_irq (lock=0xfffff801e0654e70) at /usr/src/sys/dev/drm/i915/../../../dev/drm/include/linux/spinlock.h:55
#5 intel_crtc_has_pending_flip (crtc=<optimized out>) at /usr/src/sys/dev/drm/i915/intel_display.c:3223
#6 intel_crtc_wait_for_pending_flips (crtc=<optimized out>) at /usr/src/sys/dev/drm/i915/intel_display.c:3841
#7 intel_atomic_prepare_commit (nonblock=<optimized out>, state=0xfffff800cf2ab240, dev=<optimized out>) at /usr/src/sys/dev/drm/i915/intel_display.c:13480
#8 intel_atomic_commit (dev=<optimized out>, state=0xfffff800cf2ab240, nonblock=<optimized out>) at /usr/src/sys/dev/drm/i915/intel_display.c:13614
#9 0xffffffff830567cc in drm_atomic_helper_set_config (set=0xfffff801f576f678) at /usr/src/sys/dev/drm/drm/../drm_atomic_helper.c:1875
#10 0xffffffff8302e842 in drm_mode_set_config_internal (set=set at entry=0xfffff801f576f678) at /usr/src/sys/dev/drm/drm/../drm_crtc.c:2687
#11 0xffffffff8302ef60 in drm_mode_setcrtc (dev=0xfffff801e0654b00, data=0xfffff801f576f868, file_priv=<optimized out>) at /usr/src/sys/dev/drm/drm/../drm_crtc.c:2919
#12 0xffffffff8304ab6b in drm_ioctl (ap=<optimized out>) at /usr/src/sys/dev/drm/drm/../drm_ioctl.c:694
#13 0xffffffff80615185 in dev_dioctl (dev=dev at entry=0xfffff800d2271dc0, cmd=cmd at entry=3228066978, data=data at entry=0xfffff801f576f868 "\360\003\271", fflag=<optimized out>,
cred=cred at entry=0xfffff8005c70ef50, msg=msg at entry=0xfffff801f576f960, fp=0xfffff800d3c6e800) at /usr/src/sys/kern/kern_device.c:244
#14 0xffffffff808e7e25 in devfs_fo_ioctl (fp=0xfffff800d3c6e800, com=3228066978, data=0xfffff801f576f868 "\360\003\271", ucred=0xfffff8005c70ef50, msg=0xfffff801f576f960)
at /usr/src/sys/vfs/devfs/devfs_vnops.c:1550
#15 0xffffffff806860ba in fo_ioctl (msg=<optimized out>, cred=<optimized out>, data=<optimized out>, com=<optimized out>, fp=0xfffff800d3c6e800) at /usr/src/sys/sys/file2.h:84
#16 mapped_ioctl (fd=<optimized out>, com=<optimized out>, uspc_data=<optimized out>, map=0x0, msg=<optimized out>) at /usr/src/sys/kern/sys_generic.c:717
#17 0xffffffff80b87060 in syscall2 (frame=0xfffff801f576f9f8) at /usr/src/sys/platform/pc64/x86_64/trap.c:1308
#18 0xffffffff80b6221d in ?? () at /usr/src/sys/platform/pc64/x86_64/exception.S:450
#19 0x0000000000000009 in ?? ()
#20 0x00000000c06864a2 in ?? ()
#21 0x00007fffffdfcbe0 in ?? ()
#22 0x0000000000000000 in ?? ()
(kgdb) frame 2
#2 0xffffffff8062e27d in lockmgr_exclusive (lkp=lkp at entry=0xfffff801e0654e70, flags=flags at entry=2) at /usr/src/sys/kern/kern_lock.c:381
381 error = tsleep(lkp, pflags | PINTERLOCKED,
(kgdb) p *lkp
$36 = {lk_flags = 64, lk_timo = 0, lk_count = 134217729, lk_wmesg = 0xffffffff8306d80b "drmev", lk_lockholder = 0xfffff801e0662e00}
(kgdb) p *lkp->lk_lockholder
$37 = {td_threadq = {tqe_next = 0x0, tqe_prev = 0xfffff800cad40038}, td_allq = {tqe_next = 0xfffff800caec6f00, tqe_prev = 0xfffff801e0662790}, td_sleepq = {tqe_next = 0x0,
tqe_prev = 0xfffff800cad58430}, td_msgport = {mp_msgq = {tqh_first = 0x0, tqh_last = 0xfffff801e0662e30}, mp_msgq_prio = {tqh_first = 0x0, tqh_last = 0xfffff801e0662e40},
mp_flags = 0, mp_cpuid = -1, mp_u = {spin = {counta = 0, countb = 0}, serialize = 0x0, data = 0x0}, mpu_td = 0xfffff801e0662e00,
mp_getport = 0xffffffff8065b9d0 <lwkt_thread_getport>, mp_putport = 0xffffffff8065bdf0 <lwkt_thread_putport>, mp_waitmsg = 0xffffffff8065c930 <lwkt_thread_waitmsg>,
mp_waitport = 0xffffffff8065bf30 <lwkt_thread_waitport>, mp_replyport = 0xffffffff8065afe0 <lwkt_thread_replyport>, mp_dropmsg = 0xffffffff8065c310 <lwkt_thread_dropmsg>,
mp_putport_oncpu = 0xffffffff8065bdf0 <lwkt_thread_putport>}, td_lwp = 0x0, td_proc = 0x0, td_pcb = 0xfffff801f2876ac0, td_gd = 0xfffff800cad40000,
td_wmesg = 0xffffffff8380de62 "lwq", td_wchan = 0xfffff801e2661f90, td_pri = 28, td_critcount = 4, td_flags = 197760, td_wdomain = 0,
td_preemptable = 0xffffffff806535e0 <lwkt_preempt>, td_release = 0x0, td_kstack = 0xfffff801f2873000 <Address 0xfffff801f2873000 out of bounds>, td_kstack_size = 16384,
td_sp = 0xfffff801f28766d8 "\240\313\267\200\377\377\377\377\002\002", td_switch = 0xffffffff80b7cb40, td_uticks = 0, td_sticks = 0, td_iticks = 448523, td_locks = 0,
td_limit = 0x0, td_refs = 0, td_nest_count = 0, td_contended = 0, td_mpflags = 0, td_cscount = 0, td_wakefromcpu = 0, td_upri = 0, td_type = 0, td_tracker = 0, td_fdcache_lru = 0,
td_unused03 = {0, 0, 0}, td_iosdata = {iorbytes = 0, iowbytes = 0, lastticks = 0}, td_start = {tv_sec = 0, tv_usec = 0}, td_comm = "ithread16 2\000\000\000\000\000",
td_preempted = 0x0, td_ucred = 0x0, td_vmm = 0x0, td_toks_have = 0x0, td_toks_stop = 0xfffff801e0662fd8, td_toks_array = {{tr_tok = 0xffffffff815b0bc0, tr_count = 3,
tr_owner = 0xfffff801e0662e00}, {tr_tok = 0xffffffff815f10c0, tr_count = 3, tr_owner = 0xfffff801e0662e00}, {tr_tok = 0x0, tr_count = 0, tr_owner = 0x0} <repeats 30 times>},
td_fairq_load = 0, td_fairq_count = 0, td_migrate_gd = 0x0, td_fdcache = {{fd = 0, locked = 0, fp = 0x0, lru = 0, unused = {0, 0, 0}}, {fd = 0, locked = 0, fp = 0x0, lru = 0,
unused = {0, 0, 0}}, {fd = 0, locked = 0, fp = 0x0, lru = 0, unused = {0, 0, 0}}, {fd = 0, locked = 0, fp = 0x0, lru = 0, unused = {0, 0, 0}}}, td_linux_task = 0x0, td_mach = {
mtd_cpl = 0, mtd_savefpu = 0xfffff801f2876bc0, mtd_savetls = {info = {{base = 0x0, size = 0}, {base = 0x0, size = 0}}}}}
(kgdb) print lkp->lk_lockholder->td_comm
$38 = "ithread16 2\000\000\000\000\000"
(kgdb) thread 164
[Switching to thread 164 (kernel ithread16 2)]
#0 0xffffffff80653d36 in lwkt_switch () at /usr/src/sys/kern/lwkt_thread.c:810
810 lwkt_switch_return(td->td_switch(ntd));
(kgdb) bt
#0 0xffffffff80653d36 in lwkt_switch () at /usr/src/sys/kern/lwkt_thread.c:810
#1 0xffffffff806611ee in tsleep (ident=ident at entry=0xfffff801e2661f90, flags=flags at entry=1024, wmesg=<optimized out>, timo=timo at entry=0) at /usr/src/sys/kern/kern_synch.c:720
#2 0xffffffff8062e27d in lockmgr_exclusive (lkp=lkp at entry=0xfffff801e2661f90, flags=flags at entry=2) at /usr/src/sys/kern/kern_lock.c:381
#3 0xffffffff83799537 in lockmgr (flags=2, lkp=0xfffff801e2661f90) at @/sys/lock.h:271
#4 wake_up_all (q=0xfffff801e2661f90) at /usr/src/sys/dev/drm/i915/../../../dev/drm/include/linux/wait.h:76
#5 page_flip_completed (intel_crtc=intel_crtc at entry=0xfffff801e0daeb00) at /usr/src/sys/dev/drm/i915/intel_display.c:3826
#6 0xffffffff8379a2f4 in do_intel_finish_page_flip (dev=0xfffff801e0654b00, crtc=0xfffff801e0daeb00) at /usr/src/sys/dev/drm/i915/intel_display.c:10930
#7 0xffffffff837ad1e9 in do_intel_finish_page_flip (crtc=<optimized out>, dev=<optimized out>) at /usr/src/sys/dev/drm/i915/intel_display.c:10948
#8 intel_finish_page_flip_plane (dev=<optimized out>, plane=<optimized out>) at /usr/src/sys/dev/drm/i915/intel_display.c:10948
#9 0xffffffff83733370 in ilk_display_irq_handler (de_iir=67108992, dev=0xfffff801e0654b00) at /usr/src/sys/dev/drm/i915/i915_irq.c:2188
#10 ironlake_irq_handler (irq=<optimized out>, arg=0xfffff801e0654b00) at /usr/src/sys/dev/drm/i915/i915_irq.c:2306
#11 0xffffffff8065d623 in lwkt_serialize_handler_call (s=0xfffff801f2895f78, func=0xffffffff8305faa0 <linux_irq_handler>, arg=0xfffff801f2895f40, frame=frame at entry=0x0)
at /usr/src/sys/kern/lwkt_serialize.c:175
#12 0xffffffff80609b72 in ithread_handler (arg=<optimized out>) at /usr/src/sys/kern/kern_intr.c:900
#13 0xffffffff80654390 in _lwkt_dequeue (td=<error reading variable: Cannot access memory at address 0x8>) at /usr/src/sys/kern/lwkt_thread.c:160
#14 lwkt_deschedule_self (td=<optimized out>) at /usr/src/sys/kern/lwkt_thread.c:328
(kgdb) frame 2
#2 0xffffffff8062e27d in lockmgr_exclusive (lkp=lkp at entry=0xfffff801e2661f90, flags=flags at entry=2) at /usr/src/sys/kern/kern_lock.c:381
381 error = tsleep(lkp, pflags | PINTERLOCKED,
(kgdb) p *lkp
$39 = {lk_flags = 64, lk_timo = 0, lk_count = 134217729, lk_wmesg = 0xffffffff8380de62 "lwq", lk_lockholder = 0xfffff801f51e3480}
(kgdb) p *lkp->lk_lockholder
$40 = {td_threadq = {tqe_next = 0x0, tqe_prev = 0xffffffff81c4b038}, td_allq = {tqe_next = 0xfffff800d24c6200, tqe_prev = 0xfffff800d24c3490}, td_sleepq = {tqe_next = 0x0,
tqe_prev = 0xfffff800d256b020}, td_msgport = {mp_msgq = {tqh_first = 0x0, tqh_last = 0xfffff801f51e34b0}, mp_msgq_prio = {tqh_first = 0x0, tqh_last = 0xfffff801f51e34c0},
mp_flags = 0, mp_cpuid = -1, mp_u = {spin = {counta = 0, countb = 0}, serialize = 0x0, data = 0x0}, mpu_td = 0xfffff801f51e3480,
mp_getport = 0xffffffff8065b9d0 <lwkt_thread_getport>, mp_putport = 0xffffffff8065bdf0 <lwkt_thread_putport>, mp_waitmsg = 0xffffffff8065c930 <lwkt_thread_waitmsg>,
mp_waitport = 0xffffffff8065bf30 <lwkt_thread_waitport>, mp_replyport = 0xffffffff8065afe0 <lwkt_thread_replyport>, mp_dropmsg = 0xffffffff8065c310 <lwkt_thread_dropmsg>,
mp_putport_oncpu = 0xffffffff8065bdf0 <lwkt_thread_putport>}, td_lwp = 0xfffff800cf2a14c0, td_proc = 0xfffff800d1d5fa80, td_pcb = 0xfffff801f576fac0, td_gd = 0xffffffff81c4b000,
td_wmesg = 0xffffffff8306d80b "drmev", td_wchan = 0xfffff801e0654e70, td_pri = 10, td_critcount = 3, td_flags = 8521344, td_wdomain = 0, td_preemptable = 0x0, td_release = 0x0,
td_kstack = 0xfffff801f576c000 <Address 0xfffff801f576c000 out of bounds>, td_kstack_size = 16384, td_sp = 0xfffff801f576f2c0 "\200\310\267\200\377\377\377\377F\002",
td_switch = 0xffffffff80b7c720, td_uticks = 118410471, td_sticks = 2470528, td_iticks = 0, td_locks = 0, td_limit = 0xfffff801f573dbc0, td_refs = 0, td_nest_count = 0,
td_contended = 0, td_mpflags = 16, td_cscount = 0, td_wakefromcpu = 0, td_upri = -180, td_type = 0, td_tracker = -147, td_fdcache_lru = 192499, td_unused03 = {0, 0, 0},
td_iosdata = {iorbytes = 0, iowbytes = 0, lastticks = 0}, td_start = {tv_sec = 0, tv_usec = 0}, td_comm = "weston\000launch\000\000\000", td_preempted = 0x0,
td_ucred = 0xfffff8005c70ef50, td_vmm = 0x0, td_toks_have = 0x0, td_toks_stop = 0xfffff801f51e3670, td_toks_array = {{tr_tok = 0xfffff800cf2a16e0, tr_count = 3,
tr_owner = 0xfffff801f51e3480}, {tr_tok = 0xfffff800cf2a16e0, tr_count = 3, tr_owner = 0xfffff801f51e3480}, {tr_tok = 0xffffffff815646c0, tr_count = 3,
tr_owner = 0xfffff801f51e3480}, {tr_tok = 0xfffff800d2472ac0, tr_count = 3, tr_owner = 0xfffff801f51e3480}, {tr_tok = 0xfffff800d1d5ff10, tr_count = 3,
tr_owner = 0xfffff801f51e3480}, {tr_tok = 0xffffffff81ab16d0, tr_count = 3, tr_owner = 0xfffff801f51e3480}, {tr_tok = 0xffffffff8152fcc0, tr_count = 3,
tr_owner = 0xfffff801f51e3480}, {tr_tok = 0x0, tr_count = 0, tr_owner = 0x0} <repeats 25 times>}, td_fairq_load = 0, td_fairq_count = 0, td_migrate_gd = 0x0, td_fdcache = {{
fd = 32, locked = 0, fp = 0xfffff800cf22d800, lru = 192496, unused = {0, 0, 0}}, {fd = 4, locked = 0, fp = 0xfffff800d3c6e880, lru = 192498, unused = {0, 0, 0}}, {fd = 14,
locked = 0, fp = 0xfffff800d3c6e800, lru = 192486, unused = {0, 0, 0}}, {fd = 9, locked = 2, fp = 0xfffff800d3c6e800, lru = 192499, unused = {0, 0, 0}}},
td_linux_task = 0xfffff8005c5eb2d0, td_mach = {mtd_cpl = 0, mtd_savefpu = 0xfffff801f576fbc0, mtd_savetls = {info = {{base = 0x800741b40, size = -1}, {base = 0x0, size = 0}}}}}
(kgdb) p lkp->lk_lockholder->td_comm
$41 = "weston\000launch\000\000\000"
(kgdb) p lkp->lk_lockholder->td_proc->p_pid
$42 = 1064
(kgdb) p lkp->lk_lockholder->td_proc->p_ppid
$43 = 1063
---
----------------------------------------
Bug #3200: master: weston screen freezes
http://bugs.dragonflybsd.org/issues/3200#change-13828
* Author: peeter
* Status: New
* Priority: Normal
* Assignee:
* Category:
* Target version:
----------------------------------------
It has now happened at least four times in a row. After a few days of uptime, weston freezes. I can still ssh into the machine, everything else seems fine except the graphics screen is frozen. ps axlRH shows that weston is in state 'drmev'.
1001 1262 1 1261 25 199 0 266664 193568 drmev D0+ v1 7:36.42 /usr/local/bin/weston --use-pixman
This is the 'stuct event_lock' in 'struct drm_device', which is used among other things in the context of ioctls. kgdb shows this backtrace for weston:
---
(kgdb) thread 1096
[Switching to thread 1096 (pid 1262/1, weston)]
#0 0xffffffff80665e76 in lwkt_switch () at /usr/src/sys/kern/lwkt_thread.c:810
810 lwkt_switch_return(td->td_switch(ntd));
(kgdb) bt
#0 0xffffffff80665e76 in lwkt_switch () at /usr/src/sys/kern/lwkt_thread.c:810
#1 0xffffffff8067300e in tsleep (ident=ident at entry=0xfffff8037b927c70, flags=flags at entry=1024, wmesg=<optimized out>, timo=timo at entry=0)
at /usr/src/sys/kern/kern_synch.c:707
#2 0xffffffff8064040d in lockmgr_exclusive (lkp=lkp at entry=0xfffff8037b927c70, flags=flags at entry=2) at /usr/src/sys/kern/kern_lock.c:381
#3 0xffffffff83087a66 in lockmgr (flags=2, lkp=0xfffff8037b927c70) at @/sys/lock.h:271
#4 spin_lock_irq (lock=0xfffff8037b927c70) at /usr/src/sys/dev/drm/i915/../../../dev/drm/include/linux/spinlock.h:55
#5 intel_crtc_has_pending_flip (crtc=<optimized out>) at /usr/src/sys/dev/drm/i915/intel_display.c:3223
#6 intel_crtc_wait_for_pending_flips (crtc=<optimized out>) at /usr/src/sys/dev/drm/i915/intel_display.c:3841
#7 intel_atomic_prepare_commit (nonblock=<optimized out>, state=0xfffff8042ca0f340, dev=<optimized out>)
at /usr/src/sys/dev/drm/i915/intel_display.c:13480
#8 intel_atomic_commit (dev=<optimized out>, state=0xfffff8042ca0f340, nonblock=<optimized out>)
at /usr/src/sys/dev/drm/i915/intel_display.c:13614
#9 0xffffffff83d7bf6c in drm_atomic_helper_set_config (set=0xfffff80390f8d678) at /usr/src/sys/dev/drm/drm/../drm_atomic_helper.c:1878
#10 0xffffffff83d54842 in drm_mode_set_config_internal (set=set at entry=0xfffff80390f8d678) at /usr/src/sys/dev/drm/drm/../drm_crtc.c:2687
#11 0xffffffff83d54f60 in drm_mode_setcrtc (dev=0xfffff8037b927900, data=0xfffff80390f8d868, file_priv=<optimized out>)
at /usr/src/sys/dev/drm/drm/../drm_crtc.c:2919
#12 0xffffffff83d704f1 in drm_ioctl (ap=<optimized out>) at /usr/src/sys/dev/drm/drm/../drm_ioctl.c:705
#13 0xffffffff80627885 in dev_dioctl (dev=dev at entry=0xfffff801581b1c80, cmd=cmd at entry=3228066978,
data=data at entry=0xfffff80390f8d868 "\360\003\270", fflag=<optimized out>, cred=cred at entry=0xfffff8007370f190,
msg=msg at entry=0xfffff80390f8d960, fp=0xfffff8037acb3180) at /usr/src/sys/kern/kern_device.c:244
#14 0xffffffff808f78e5 in devfs_fo_ioctl (fp=0xfffff8037acb3180, com=3228066978, data=0xfffff80390f8d868 "\360\003\270",
ucred=0xfffff8007370f190, msg=0xfffff80390f8d960) at /usr/src/sys/vfs/devfs/devfs_vnops.c:1545
#15 0xffffffff80697f6a in fo_ioctl (msg=<optimized out>, cred=<optimized out>, data=<optimized out>, com=<optimized out>, fp=0xfffff8037acb3180)
at /usr/src/sys/sys/file2.h:84
#16 mapped_ioctl (fd=<optimized out>, com=<optimized out>, uspc_data=<optimized out>, map=0x0, msg=<optimized out>)
at /usr/src/sys/kern/sys_generic.c:717
#17 0xffffffff80b96400 in syscall2 (frame=0xfffff80390f8d9f8) at /usr/src/sys/platform/pc64/x86_64/trap.c:1308
#18 0xffffffff80b7159d in ?? () at /usr/src/sys/platform/pc64/x86_64/exception.S:450
#19 0x0000000000000009 in ?? ()
#20 0x00000000c06864a2 in ?? ()
#21 0x00007fffffdfc8a0 in ?? ()
#22 0x0000000000000000 in ?? ()
---
Not sure this is helpful but that's all I've got for now.
I attach the output of 'ps axlRH', maybe there's something else I should look out for.
Peeter
--
---Files--------------------------------
drmev-psalRH.out (159 KB)
weston-drmev-bug-2.md (54.5 KB)
--
You have received this notification because you have either subscribed to it, or are involved in it.
To change your notification preferences, please click here: http://bugs.dragonflybsd.org/my/account
More information about the Bugs
mailing list