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;

Reply via email to