ARM Deadlock - help debugging

Martin Laabs mailinglists at martinlaabs.de
Sat Aug 24 14:50:04 UTC 2013


Hi,

I think the problem with the hanging arm is a deadlock anywhere in the file
system.
Therefore I added the following into the kernel config file:

options INVARIANTS
options INVARIANT_SUPPORT
options WITNESS
options DEBUG_LOCKS
options DEBUG_VFS_LOCKS
options DIAGNOSTIC


>From time to time I get the following output for dmesg:

lock order reversal:
 1st 0xc2fa0b74 ufs (ufs) @
/usr/home/martin/Rasperry/head/sys/kern/vfs_lookup.c
:518
 2nd 0xcc4f00d8 bufwait (bufwait) @
/usr/home/martin/Rasperry/head/sys/ufs/ffs/f
fs_vnops.c:262
 3rd 0xc30f28a4 ufs (ufs) @
/usr/home/martin/Rasperry/head/sys/kern/vfs_subr.c:2
099
KDB: stack backtrace:
db_trace_self() at db_trace_self
         pc = 0xc0474e34  lr = 0xc012e444 (db_trace_self_wrapper+0x30)
         sp = 0xdc9e6410  fp = 0xdc9e6528
        r10 = 0xc04f1881
db_trace_self_wrapper() at db_trace_self_wrapper+0x30
         pc = 0xc012e444  lr = 0xc0276910 (kdb_backtrace+0x38)
         sp = 0xdc9e6530  fp = 0xdc9e6538
         r4 = 0xc05c0964  r5 = 0xc04d4338
         r6 = 0xc04dc976  r7 = 0xc04f1884
kdb_backtrace() at kdb_backtrace+0x38
         pc = 0xc0276910  lr = 0xc0290e14 (witness_checkorder+0xddc)
         sp = 0xdc9e6540  fp = 0xdc9e6590
         r4 = 0xc04c3234
witness_checkorder() at witness_checkorder+0xddc
         pc = 0xc0290e14  lr = 0xc0225424 (__lockmgr_args+0x698)
        sp = 0xdc9e6598  fp = 0xdc9e6600
         r4 = 0x00080100  r5 = 0x00000833
         r6 = 0xc30f28a4  r7 = 0x00080000
         r8 = 0x00000100  r9 = 0xc30f2910
        r10 = 0xc04dc973
__lockmgr_args() at __lockmgr_args+0x698
         pc = 0xc0225424  lr = 0xc042de1c (ffs_lock+0x90)
         sp = 0xdc9e6608  fp = 0xdc9e6638
         r4 = 0xdc9e6658  r5 = 0x00080100
         r6 = 0xc30f2870  r7 = 0xc30f28a4
         r8 = 0xc04f1af3  r9 = 0xc30f2910
        r10 = 0x00000000
ffs_lock() at ffs_lock+0x90
         pc = 0xc042de1c  lr = 0xc0495ac0 (VOP_LOCK1_APV+0xd8)
         sp = 0xdc9e6640  fp = 0xdc9e6650
         r4 = 0xdc9e6658  r5 = 0xc0594770
         r6 = 0x00000000  r7 = 0x00080100
         r8 = 0xc2f7f960  r9 = 0x00000833
        r10 = 0xc04dc973
VOP_LOCK1_APV() at VOP_LOCK1_APV+0xd8
         pc = 0xc0495ac0  lr = 0xc02f1d80 (_vn_lock+0x94)
         sp = 0xdc9e6658  fp = 0xdc9e6688
         r4 = 0xc30f2870  r5 = 0x00000000
         r6 = 0x00080100
_vn_lock() at _vn_lock+0x94
         pc = 0xc02f1d80  lr = 0xc02e1b48 (vget+0x60)
         sp = 0xdc9e6690  fp = 0xdc9e66b0
         r4 = 0xc30f2870  r5 = 0x00000000
         r6 = 0x00080100  r7 = 0x00000000
         r8 = 0xc2f7f960  r9 = 0xc04dbb75
        r10 = 0x00000000
vget() at vget+0x60
         pc = 0xc02e1b48  lr = 0xc02d6000 (vfs_hash_get+0xe4)
         sp = 0xdc9e66b8  fp = 0xdc9e66e8
         r4 = 0xc2e0e2f8  r5 = 0x00000000
         r6 = 0x0001d59d  r7 = 0x00000000
         r8 = 0xc30f2870
vfs_hash_get() at vfs_hash_get+0xe4
         pc = 0xc02d6000  lr = 0xc0428e60 (ffs_vgetf+0x3c)
         sp = 0xdc9e66f0  fp = 0xdc9e6740
         r4 = 0x0001d59d  r5 = 0xc04ee444
         r6 = 0xc30fd140  r7 = 0xdc9e67a8
         r8 = 0xc30fd140  r9 = 0x00080000
        r10 = 0xc2e0e2f8
ffs_vgetf() at ffs_vgetf+0x3c
         pc = 0xc0428e60  lr = 0xc0421ac4 (softdep_sync_buf+0x974)
         sp = 0xdc9e6748  fp = 0xdc9e67c8
         r4 = 0x0001d59d  r5 = 0xc04ee444
         r6 = 0xc30fd140  r7 = 0xc04ee444
         r8 = 0xc30fd140  r9 = 0x0000088b
        r10 = 0x0001d59d
softdep_sync_buf() at softdep_sync_buf+0x974
         pc = 0xc0421ac4  lr = 0xc042ec04 (ffs_syncvnode+0x2bc)
         sp = 0xdc9e67d0  fp = 0xdc9e6820
         r4 = 0x00000000  r5 = 0x00000000
         r6 = 0x00000400  r7 = 0xc2fa0b40
         r8 = 0xc04f1881  r9 = 0xcc4f00d8
        r10 = 0xcc4f0080
ffs_syncvnode() at ffs_syncvnode+0x2bc
         pc = 0xc042ec04  lr = 0xc0403f64 (ffs_truncate+0x790)
         sp = 0xdc9e6828  fp = 0xdc9e69d8
         r4 = 0x00000000  r5 = 0xc2fa0b40
         r6 = 0x00000200  r7 = 0xc2e17000
         r8 = 0x00000000  r9 = 0x00000000
        r10 = 0xc2fa0b40
ffs_truncate() at ffs_truncate+0x790
         pc = 0xc0403f64  lr = 0xc0436414 (ufs_direnter+0x8a8)
         sp = 0xdc9e69e0  fp = 0xdc9e6a48
         r4 = 0xc2fa0b40  r5 = 0x00000000
         r6 = 0xc30f2870  r7 = 0xc2f9e700
         r8 = 0x00000014  r9 = 0xc2fa0b40
        r10 = 0xcd218134
ufs_direnter() at ufs_direnter+0x8a8
         pc = 0xc0436414  lr = 0xc043f6d0 (ufs_makeinode+0x3f4)
         sp = 0xdc9e6a50  fp = 0xdc9e6bb0
         r4 = 0xdc9e6a70  r5 = 0xc2f9d300
         r6 = 0xdc9e6d40  r7 = 0x00000000
         r8 = 0xc2fa0b40  r9 = 0xdc9e6d28
        r10 = 0x000081a4
ufs_makeinode() at ufs_makeinode+0x3f4
         pc = 0xc043f6d0  lr = 0xc043bb34 (ufs_create+0x24)
         sp = 0xdc9e6bb8  fp = 0xdc9e6bb8
         r4 = 0xdc9e6c88  r5 = 0xc0594c90
         r6 = 0x00000000  r7 = 0x00000602
         r8 = 0x00000000  r9 = 0xdc9e6d28
        r10 = 0xdc9e6d48
ufs_create() at ufs_create+0x24
         pc = 0xc043bb34  lr = 0xc04934d4 (VOP_CREATE_APV+0xec)
         sp = 0xdc9e6bc0  fp = 0xdc9e6bd0
VOP_CREATE_APV() at VOP_CREATE_APV+0xec
         pc = 0xc04934d4  lr = 0xc02f1640 (vn_open_cred+0x268)
         sp = 0xdc9e6bd8  fp = 0xdc9e6cb8
         r4 = 0xdc9e6ce8  r5 = 0xdc9e6d28
         r6 = 0xc2fa0b40
vn_open_cred() at vn_open_cred+0x268
         pc = 0xc02f1640  lr = 0xc02f13d0 (vn_open+0x24)
         sp = 0xdc9e6cc0  fp = 0xdc9e6cc8
         r4 = 0xc2f7f960  r5 = 0xdc9e6d10
         r6 = 0xc2decc00  r7 = 0xdc9e6ce8
         r8 = 0x00000012  r9 = 0x00000000
        r10 = 0x00000000
vn_open() at vn_open+0x24
         pc = 0xc02f13d0  lr = 0xc02ea9f8 (kern_openat+0x1a4)
         sp = 0xdc9e6cd0  fp = 0xdc9e6da8
kern_openat() at kern_openat+0x1a4
         pc = 0xc02ea9f8  lr = 0xc02ea7e8 (sys_open+0x28)
         sp = 0xdc9e6db0  fp = 0xdc9e6db8
         r4 = 0xc2f7f960  r5 = 0x00000000
         r6 = 0x2092e2ec  r7 = 0x00000000
         r8 = 0xdc9e6e10  r9 = 0xc2df6320
        r10 = 0x00000001
sys_open() at sys_open+0x28
         pc = 0xc02ea7e8  lr = 0xc0484c44 (swi_handler+0x284)
         sp = 0xdc9e6dc0  fp = 0xdc9e6e58
swi_handler() at swi_handler+0x284
         pc = 0xc0484c44  lr = 0xc0476490 (swi_entry+0x2c)
         sp = 0xdc9e6e60  fp = 0xbfffe310
         r4 = 0x2091a330  r5 = 0x2083d138
         r6 = 0x2092e2ec  r7 = 0x00000005
         r8 = 0x00000001  r9 = 0x00000000
swi_entry() at swi_entry+0x2c
         pc = 0xc0476490  lr = 0xc0476490 (swi_entry+0x2c)
         sp = 0xdc9e6e60  fp = 0xbfffe310


Since I am not familiar with the FreeBSD kernel internals I would like to
know if this is something I should try to investigate further.

Thank you,
 Martin

PS: Is it possible to display the dmesg continuously like you can have a
look to logfiles with tail -f?



More information about the freebsd-arm mailing list