NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
kern/54617: deadlock between sysmon and onewire drivers
>Number: 54617
>Category: kern
>Synopsis: deadlock between sysmon and onewire drivers
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: kern-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Mon Oct 14 12:00:00 +0000 2019
>Originator: Andrew Doran
>Release: 8.1
>Organization:
Andrew Doran
>Environment:
NetBSD steamy.local 8.1_STABLE NetBSD 8.1_STABLE (GENERIC) #1: Sat Oct 5 23:56:59 IST 2019 ad@steamy.local:/local/home/ad/src-81/src/sys/arch/amd64/compile/GENERIC amd64
>Description:
Processing an envstat(1) invocation. sme_global_mtx is acquired, and then owtemp_refresh() called to read the sensor data. In turn this attempts to acquire the onewire rwlock, which is already held:
crash> t/a fffffe80795274e0
trace: pid 6734 lid 1 at 0xffff800043f66b10
sleepq_block() at sleepq_block+0x97
turnstile_block() at turnstile_block+0x24f
rw_vector_enter() at rw_vector_enter+0x120
owtemp_refresh() at owtemp_refresh+0x22
sysmon_envsys_refresh_sensor() at sysmon_envsys_refresh_sensor+0x80
sme_update_dictionary() at sme_update_dictionary+0xca
sysmonioctl_envsys() at sysmonioctl_envsys+0x28e
VOP_IOCTL() at VOP_IOCTL+0x54
vn_ioctl() at vn_ioctl+0xa6
sys_ioctl() at sys_ioctl+0x11a
syscall() at syscall+0x1ec
--- syscall (number 54) ---
7c68590ff13a:
crash> ps/w | grep 6734
6734 1 envstat netbsd 43 tstile fffffe807decfe10
crash> x/Lx fffffe807decfe10
fffffe807decfe10: fffffe807d004ba7
crash> ps | grep fffffe807d004ba
0 74 3 0 200 fffffe807d004ba0 onewire0 tstile
Concurrently, onewire_thread() thinks the device is gone. This kthread holds the onewire rwlock, and during the detach attempts to acquire sme_global_mtx:
crash> t/a fffffe807d004ba0
trace: pid 0 lid 74 at 0xffff800043f0ae00
sleepq_block() at sleepq_block+0x97
turnstile_block() at turnstile_block+0x24f
mutex_vector_enter() at mutex_vector_enter+0x34a
sysmon_envsys_unregister() at sysmon_envsys_unregister+0x16
owtemp_detach() at owtemp_detach+0x15
config_detach() at config_detach+0xa1
onewire_thread() at onewire_thread+0x283
>How-To-Repeat:
Drive some devices via owtemp & call envstat regularly.
>Fix:
None offered. I suspect this is a pattern repeated elsewhere.
Home |
Main Index |
Thread Index |
Old Index