NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/58871: Stuck processes
Am 28.12.24 um 16:13 schrieb Taylor R Campbell:
Did that for the one process that was in tstile, the "find" one.
Thanks, that's pretty weird: find is waiting for a lock but nobody is
holding it!
PID LID COMMAND WAITING-FOR WAIT-CHANNEL
11160 11160 find 0 95e9ea40
I have another hanging find process. Again, this is the only process in
tstile, same symptoms.
Here's a backtrace of where it is stuck:
db{0}> trace/t 0t15932
trace: pid 15932 lid 15932 at 0xbced4b3c
0xbced4b3c: netbsd:mi_switch+0xc
0xbced4b64: netbsd:sleepq_block+0xac
0xbced4bd4: netbsd:turnstile_block+0x32c
0xbced4c44: netbsd:rw_enter+0x148
0xbced4c5c: netbsd:genfs_lock+0x7c
0xbced4c9c: netbsd:VOP_LOCK+0x84
0xbced4cb4: netbsd:vn_lock+0x18
0xbced4d9c: netbsd:namei_tryemulroot.constprop.0+0x6f0
0xbced4dcc: netbsd:namei+0x58
0xbced4e34: netbsd:do_sys_statat+0xd0
0xbced4eec: netbsd:sys___lstat50+0x2c
0xbced4fac: netbsd:syscall+0x188
Just to be absolutely sure, can you send output of the following on
your kernel?
$ ident /netbsd | grep -F cpuswitch.S
This is the NetBSD 10.1 release, so:
$NetBSD: cpuswitch.S,v 1.105.12.1 2023/07/31 13:36:32 martin Exp $
And can you share the disassembly of the function cpu_switchto in your
kernel, with objdump or gdb?
(gdb) disassemble cpu_switchto
Dump of assembler code for function cpu_switchto:
0x8009ea7c <+0>: mov r12, sp
0x8009ea80 <+4>: push {r4, r5, r6, r7, r12, lr}
0x8009ea84 <+8>: mov r6, r1
0x8009ea88 <+12>: mov r4, r0
0x8009ea8c <+16>: ldr r5, [r6]
0x8009ea90 <+20>: ldr r7, [r4, #32]
0x8009ea94 <+24>: strd r8, [r7]
0x8009ea98 <+28>: strd r10, [r7, #8]
0x8009ea9c <+32>: strd r12, [r7, #16]
0x8009eaa0 <+36>: mrc 15, 0, r0, cr13, cr0, {2}
0x8009eaa4 <+40>: str r0, [r7, #32]
0x8009eaa8 <+44>: cpsid i
0x8009eaac <+48>: mcr 15, 0, r6, cr13, cr0, {4}
0x8009eab0 <+52>: dmb sy
0x8009eab4 <+56>: str r6, [r5, #896] ; 0x380
0x8009eab8 <+60>: dmb sy
0x8009eabc <+64>: ldr r7, [r6, #32]
0x8009eac0 <+68>: ldr sp, [r7, #20]
0x8009eac4 <+72>: cpsie i
0x8009eac8 <+76>: ldr r0, [r6, #80] ; 0x50
0x8009eacc <+80>: tst r0, #512 ; 0x200
0x8009ead0 <+84>: bne 0x8009eb18 <cpu_switchto+156>
0x8009ead4 <+88>: ldr r0, [r7, #32]
0x8009ead8 <+92>: mcr 15, 0, r0, cr13, cr0, {2}
0x8009eadc <+96>: ldr r0, [r6, #504] ; 0x1f8
0x8009eae0 <+100>: mcr 15, 0, r0, cr13, cr0, {3}
0x8009eae4 <+104>: ldr r0, [r5, #1068] ; 0x42c
0x8009eae8 <+108>: cmp r0, #0
0x8009eaec <+112>: ldrne r0, [r7, #48] ; 0x30
0x8009eaf0 <+116>: vmsrne fpexc, r0
0x8009eaf4 <+120>: ldr r0, [r6, #308] ; 0x134
0x8009eaf8 <+124>: ldr r2, [r0, #132] ; 0x84
0x8009eafc <+128>: cmp r2, #0
0x8009eb00 <+132>: beq 0x8009eb18 <cpu_switchto+156>
0x8009eb04 <+136>: ldr r8, [r6, #36] ; 0x24
0x8009eb08 <+140>: ldr r1, [r8, #76] ; 0x4c
0x8009eb0c <+144>: bl 0x8043c368 <ras_lookup>
0x8009eb10 <+148>: cmn r0, #1
0x8009eb14 <+152>: strne r0, [r8, #76] ; 0x4c
0x8009eb18 <+156>: ldrd r8, [r7]
0x8009eb1c <+160>: ldrd r10, [r7, #8]
0x8009eb20 <+164>: ldr r12, [r7, #16]
0x8009eb24 <+168>: mov r0, r4
0x8009eb28 <+172>: mov r1, r6
0x8009eb2c <+176>: clrex
0x8009eb30 <+180>: pop {r4, r5, r6, r7, r12, pc}
End of assembler dump.
Also, if you have netbsd.gdb for the kernel, can you force a crash
dump (enter ddb and run `sync'), so we can see the arguments and
locals in the stack trace? Curious to see what file find is stuck on.
Is netbsd.gdb part of the release? I haven't found it on cdn.netbsd.org.
The "debug" set contains a file /usr/libdata/debug/netbsd-GENERIC.debug,
but that's all I have.
--
Benny
Home |
Main Index |
Thread Index |
Old Index