From 6234ad34b6cf5e2fc5f4a23a0613cc2cf7df2fd6 Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <riastradh@NetBSD.org>
Date: Sun, 13 Feb 2022 12:54:17 +0000
Subject: [PATCH] kern: More lockdebug barriers in the idle loop.

Something appears to have leaked a kernel lock in a crash dump I've
seen, so let's try to track it down.
---
 sys/kern/kern_idle.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/sys/kern/kern_idle.c b/sys/kern/kern_idle.c
index dc1fc194f491..e65aefba3906 100644
--- a/sys/kern/kern_idle.c
+++ b/sys/kern/kern_idle.c
@@ -76,18 +76,24 @@ idle_loop(void *dummy)
 		KASSERT(l->l_priority == PRI_IDLE);
 
 		sched_idle();
+		LOCKDEBUG_BARRIER(NULL, 0);
 		if (!sched_curcpu_runnable_p()) {
 			if ((spc->spc_flags & SPCF_OFFLINE) == 0) {
+				LOCKDEBUG_BARRIER(NULL, 0);
 				uvm_idle();
 			}
+			LOCKDEBUG_BARRIER(NULL, 0);
 			if (!sched_curcpu_runnable_p()) {
+				LOCKDEBUG_BARRIER(NULL, 0);
 				cpu_idle();
+				LOCKDEBUG_BARRIER(NULL, 0);
 				if (!sched_curcpu_runnable_p() &&
 				    !ci->ci_want_resched) {
 					continue;
 				}
 			}
 		}
+		LOCKDEBUG_BARRIER(NULL, 0);
 		KASSERT(l->l_mutex == l->l_cpu->ci_schedstate.spc_lwplock);
 		lwp_lock(l);
 		spc_lock(l->l_cpu);