The following diff should allow most of utrace to run without kernel lock. It makes utrace() less expensive if ktrace is not used.
-- :wq Claudio Index: kern/kern_ktrace.c =================================================================== RCS file: /cvs/src/sys/kern/kern_ktrace.c,v retrieving revision 1.110 diff -u -p -r1.110 kern_ktrace.c --- kern/kern_ktrace.c 9 Feb 2023 08:00:31 -0000 1.110 +++ kern/kern_ktrace.c 15 Feb 2023 10:17:54 -0000 @@ -335,8 +335,11 @@ ktruser(struct proc *p, const char *id, else memp = stkbuf; error = copyin(addr, memp, len); - if (error == 0) + if (error == 0) { + KERNEL_LOCK(); ktrwrite2(p, &kth, &ktp, sizeof(ktp), memp, len); + KERNEL_UNLOCK(); + } if (memp != stkbuf) free(memp, M_TEMP, len); } Index: kern/syscalls.master =================================================================== RCS file: /cvs/src/sys/kern/syscalls.master,v retrieving revision 1.243 diff -u -p -r1.243 syscalls.master --- kern/syscalls.master 14 Feb 2023 08:34:49 -0000 1.243 +++ kern/syscalls.master 15 Feb 2023 10:28:02 -0000 @@ -370,7 +370,7 @@ 206 OBSOL t32_futimes 207 STD { pid_t sys_getpgid(pid_t pid); } 208 OBSOL nnpfspioctl -209 STD { int sys_utrace(const char *label, const void *addr, \ +209 STD NOLOCK { int sys_utrace(const char *label, const void *addr, \ size_t len); } ; ; Syscalls 210-219 were reserved for dynamically loaded syscalls