Module Name: src Committed By: riastradh Date: Tue Sep 13 09:28:06 UTC 2022
Modified Files: src/sys/kern: kern_lock.c Log Message: KERNEL_LOCK(9): Avoid spinning out until 10sec have passed. This means we'll never spin out if the hardclock timer is stuck. But the hardclock timer never runs with the kernel lock held itself, so it's not immediately clear that's important. To generate a diff of this commit: cvs rdiff -u -r1.179 -r1.180 src/sys/kern/kern_lock.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/kern_lock.c diff -u src/sys/kern/kern_lock.c:1.179 src/sys/kern/kern_lock.c:1.180 --- src/sys/kern/kern_lock.c:1.179 Tue Sep 13 09:14:26 2022 +++ src/sys/kern/kern_lock.c Tue Sep 13 09:28:05 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_lock.c,v 1.179 2022/09/13 09:14:26 riastradh Exp $ */ +/* $NetBSD: kern_lock.c,v 1.180 2022/09/13 09:28:05 riastradh Exp $ */ /*- * Copyright (c) 2002, 2006, 2007, 2008, 2009, 2020 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_lock.c,v 1.179 2022/09/13 09:14:26 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_lock.c,v 1.180 2022/09/13 09:28:05 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_lockdebug.h" @@ -195,6 +195,7 @@ _kernel_lock(int nlocks) #ifdef LOCKDEBUG static struct cpu_info *kernel_lock_holder; u_int spins = 0; + u_int starttime = getticks(); #endif int s; struct lwp *l = curlwp; @@ -254,7 +255,8 @@ _kernel_lock(int nlocks) while (__SIMPLELOCK_LOCKED_P(kernel_lock)) { #ifdef LOCKDEBUG extern int start_init_exec; - if (SPINLOCK_SPINOUT(spins) && start_init_exec) { + if (SPINLOCK_SPINOUT(spins) && start_init_exec && + (getticks() - starttime) > 10*hz) { ipi_msg_t msg = { .func = kernel_lock_trace_ipi, };