Module Name: src Committed By: riastradh Date: Fri Aug 4 07:40:30 UTC 2023
Modified Files: src/sys/kern: kern_softint.c Log Message: softint(9): Sprinkle KASSERT(!cold). Softints are forbidden to run while cold. So let's make sure nobody even tries it -- if they do, they might be delayed indefinitely, which is going to be much harder to diagnose. To generate a diff of this commit: cvs rdiff -u -r1.73 -r1.74 src/sys/kern/kern_softint.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_softint.c diff -u src/sys/kern/kern_softint.c:1.73 src/sys/kern/kern_softint.c:1.74 --- src/sys/kern/kern_softint.c:1.73 Sun Apr 9 09:18:09 2023 +++ src/sys/kern/kern_softint.c Fri Aug 4 07:40:30 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_softint.c,v 1.73 2023/04/09 09:18:09 riastradh Exp $ */ +/* $NetBSD: kern_softint.c,v 1.74 2023/08/04 07:40:30 riastradh Exp $ */ /*- * Copyright (c) 2007, 2008, 2019, 2020 The NetBSD Foundation, Inc. @@ -170,7 +170,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_softint.c,v 1.73 2023/04/09 09:18:09 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_softint.c,v 1.74 2023/08/04 07:40:30 riastradh Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -488,6 +488,8 @@ softint_schedule(void *arg) SDT_PROBE2(sdt, kernel, softint, schedule, arg, /*ci*/NULL); + KASSERT(!cold); + /* * If this assert fires, rather than disabling preemption explicitly * to make it stop, consider that you are probably using a softint @@ -569,6 +571,7 @@ softint_execute(lwp_t *l, int s) KASSERT(si->si_cpu == curcpu()); KASSERT(si->si_lwp->l_wchan == NULL); KASSERT(si->si_active); + KASSERT(!cold); /* * Note: due to priority inheritance we may have interrupted a @@ -721,6 +724,8 @@ softint_thread(void *cookie) lwp_t *l; int s; + KASSERT(!cold); + l = curlwp; si = l->l_private; @@ -800,6 +805,8 @@ softint_dispatch(lwp_t *pinned, int s) u_int timing; lwp_t *l; + KASSERT(!cold); + #ifdef DIAGNOSTIC if ((pinned->l_pflag & LP_RUNNING) == 0 || curlwp->l_stat != LSIDL) { struct lwp *onproc = curcpu()->ci_onproc;