On 5/20/25 01:51, Mark Millard wrote:
Dennis Clarke <dclarke_at_blastwave.org> wrote on Date: Tue, 20 May 2025 02:33:58 UTC:Just an odd message to see on the console : # witness_lock_list_get: witness exhausted Looking at https://cgit.freebsd.org/src/tree/sys/kern/subr_witness.c it seems that the comment at line 370 is very clear : /* * If set to 0, lock order checking is disabled. If set to -1, * witness is completely disabled. Otherwise witness performs full * lock order checking for all locks. At runtime, lock order checking * may be toggled. However, witness cannot be reenabled once it is * completely disabled. */ static int witness_watch = 1; So I wonder how I managed to get that message "witness exhausted" ? At line 2203 I see : static struct lock_list_entry * witness_lock_list_get(void) { struct lock_list_entry *lle; if (witness_watch == -1) return (NULL); mtx_lock_spin(&w_mtx); lle = w_lock_list_free; if (lle == NULL) {Looks to me like "out of required resources, cannot continue with the mode of use" code: an empty free list so no node is available to put to use to continue with the witness handling.
Seems like a strange feature that simply gives up and goes away if the system gets a bit busy. This system was running a poudriere build of kde when the message appeared on the console. There was still plenty of memory available so there must be some hard coded limit in there that needs to be adjusted.
witness_watch = -1; mtx_unlock_spin(&w_mtx); printf("%s: witness exhausted\n", __func__); return (NULL); } w_lock_list_free = lle->ll_next; mtx_unlock_spin(&w_mtx); bzero(lle, sizeof(*lle)); return (lle); } Where it seems that indeed witness_watch has been flipped to -1 and that functionality is now gone?Until the next boot, anyway.
A fairly stange feature that is implemented by default if one merely does a buildworld/buildkernel sequence with no adjustments. -- -- Dennis Clarke RISC-V/SPARC/PPC/ARM/CISC UNIX and Linux spoken
