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);