Date: Thu, 05 Mar 2026 18:44:27 +0000 From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 6feb16b77e7d - main - witness: report a thread that can't sleep in WITNESS_WARN Message-ID: <69a9cf0b.47158.66f48a02@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=6feb16b77e7df470c635bc3af65d448fd37deb10 commit 6feb16b77e7df470c635bc3af65d448fd37deb10 Author: Gleb Smirnoff <glebius@FreeBSD.org> AuthorDate: 2026-03-05 18:43:17 +0000 Commit: Gleb Smirnoff <glebius@FreeBSD.org> CommitDate: 2026-03-05 18:43:17 +0000 witness: report a thread that can't sleep in WITNESS_WARN Although this is not related to locking, but seems to be the right place to catch violators, given that WITNESS_WARN is already used widely in the kernel. Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D55316 --- sys/kern/subr_witness.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sys/kern/subr_witness.c b/sys/kern/subr_witness.c index 7437a7e238f0..85dc0c321797 100644 --- a/sys/kern/subr_witness.c +++ b/sys/kern/subr_witness.c @@ -2136,6 +2136,15 @@ witness_warn(int flags, struct lock_object *lock, const char *fmt, ...) n += witness_list_locks(&lock_list, printf); } else sched_unpin(); + + if (td->td_no_sleeping != 0 && (flags & WARN_SLEEPOK) != 0) { + va_start(ap, fmt); + vprintf(fmt, ap); + va_end(ap); + printf(" with %d sleep inhibitors\n", td->td_no_sleeping); + n += td->td_no_sleeping; + } + if (flags & WARN_PANIC && n) kassert_panic("%s", __func__); elsehome | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69a9cf0b.47158.66f48a02>
