Module Name: src Committed By: martin Date: Wed Aug 9 17:42:06 UTC 2023
Modified Files: src/external/cddl/osnet/sys/sys [netbsd-10]: kcondvar.h src/share/man/man4 [netbsd-10]: ddb.4 src/sys/arch/alpha/include [netbsd-10]: mutex.h src/sys/arch/amiga/dev [netbsd-10]: grfabs_cc.c src/sys/arch/amiga/include [netbsd-10]: intr.h src/sys/arch/arm/include [netbsd-10]: cpu.h mutex.h src/sys/arch/arm/xscale [netbsd-10]: pxa2x0_intr.c pxa2x0_intr.h src/sys/arch/atari/include [netbsd-10]: intr.h src/sys/arch/cesfic/include [netbsd-10]: intr.h src/sys/arch/evbarm/g42xxeb [netbsd-10]: obio.c src/sys/arch/evbarm/include [netbsd-10]: intr.h src/sys/arch/evbarm/lubbock [netbsd-10]: obio.c sacc_obio.c src/sys/arch/hp300/include [netbsd-10]: intr.h src/sys/arch/hppa/include [netbsd-10]: intr.h mutex.h src/sys/arch/ia64/acpi [netbsd-10]: madt.c src/sys/arch/ia64/include [netbsd-10]: mutex.h sapicvar.h src/sys/arch/luna68k/include [netbsd-10]: intr.h src/sys/arch/m68k/include [netbsd-10]: mutex.h src/sys/arch/mac68k/include [netbsd-10]: intr.h src/sys/arch/mips/include [netbsd-10]: mutex.h src/sys/arch/mvme68k/include [netbsd-10]: intr.h src/sys/arch/news68k/include [netbsd-10]: intr.h src/sys/arch/next68k/include [netbsd-10]: intr.h src/sys/arch/or1k/include [netbsd-10]: mutex.h src/sys/arch/powerpc/include [netbsd-10]: mutex.h src/sys/arch/riscv/include [netbsd-10]: mutex.h src/sys/arch/sh3/include [netbsd-10]: mutex.h src/sys/arch/sparc/include [netbsd-10]: cpu.h mutex.h psl.h src/sys/arch/sparc64/include [netbsd-10]: cpu.h mutex.h psl.h src/sys/arch/sun68k/include [netbsd-10]: intr.h src/sys/arch/usermode/include [netbsd-10]: mutex.h src/sys/arch/vax/include [netbsd-10]: intr.h mutex.h src/sys/arch/x68k/include [netbsd-10]: intr.h src/sys/arch/x86/include [netbsd-10]: cpu.h mutex.h src/sys/ddb [netbsd-10]: db_command.c ddb.h files.ddb src/sys/external/bsd/drm2/include/linux [netbsd-10]: idr.h src/sys/kern [netbsd-10]: kern_core.c src/sys/opencrypto [netbsd-10]: cryptodev.h src/sys/sys [netbsd-10]: cpu_data.h ksem.h lua.h proc.h rwlock.h sched.h src/sys/uvm [netbsd-10]: uvm_param.h src/usr.sbin/crash [netbsd-10]: Makefile Added Files: src/sys/ddb [netbsd-10]: db_syncobj.c db_syncobj.h Log Message: Pull up following revision(s) (requested by maya in ticket #316): sys/arch/m68k/include/mutex.h: revision 1.13 sys/arch/arm/include/cpu.h: revision 1.125 sys/arch/sun68k/include/intr.h: revision 1.21 sys/arch/arm/include/mutex.h: revision 1.28 sys/sys/rwlock.h: revision 1.18 sys/arch/powerpc/include/mutex.h: revision 1.7 sys/arch/arm/include/mutex.h: revision 1.29 sys/arch/powerpc/include/mutex.h: revision 1.8 sys/uvm/uvm_param.h: revision 1.42 sys/sys/ksem.h: revision 1.16 sys/arch/x86/include/mutex.h: revision 1.10 sys/sys/proc.h: revision 1.372 sys/sys/ksem.h: revision 1.17 sys/arch/ia64/include/mutex.h: revision 1.8 sys/arch/evbarm/include/intr.h: revision 1.29 sys/sys/lua.h: revision 1.9 sys/arch/next68k/include/intr.h: revision 1.23 sys/arch/ia64/include/mutex.h: revision 1.9 sys/arch/hp300/include/intr.h: revision 1.35 sys/arch/hp300/include/intr.h: revision 1.36 sys/arch/sparc/include/cpu.h: revision 1.111 sys/arch/hppa/include/mutex.h: revision 1.16 sys/arch/vax/include/intr.h: revision 1.31 sys/arch/hppa/include/mutex.h: revision 1.17 sys/arch/news68k/include/intr.h: revision 1.28 sys/arch/hppa/include/mutex.h: revision 1.18 sys/arch/hppa/include/intr.h: revision 1.3 sys/arch/hppa/include/mutex.h: revision 1.19 sys/arch/hppa/include/intr.h: revision 1.4 sys/sys/sched.h: revision 1.92 sys/opencrypto/cryptodev.h: revision 1.51 sys/arch/vax/include/mutex.h: revision 1.20 sys/arch/sparc64/include/mutex.h: revision 1.10 sys/arch/ia64/include/sapicvar.h: revision 1.2 sys/arch/riscv/include/mutex.h: revision 1.5 sys/arch/amiga/dev/grfabs_cc.c: revision 1.39 sys/external/bsd/drm2/include/linux/idr.h: revision 1.11 sys/arch/riscv/include/mutex.h: revision 1.6 sys/ddb/files.ddb: revision 1.16 sys/arch/mac68k/include/intr.h: revision 1.32 share/man/man4/ddb.4: revision 1.203 sys/ddb/db_command.c: revision 1.183 sys/arch/mips/include/mutex.h: revision 1.10 sys/ddb/db_command.c: revision 1.184 sys/arch/x68k/include/intr.h: revision 1.22 sys/arch/sparc/include/psl.h: revision 1.51 sys/arch/or1k/include/mutex.h: revision 1.4 sys/arch/mips/include/mutex.h: revision 1.11 sys/arch/arm/xscale/pxa2x0_intr.h: revision 1.16 sys/arch/sparc64/include/cpu.h: revision 1.134 sys/arch/sparc/include/psl.h: revision 1.52 sys/arch/or1k/include/mutex.h: revision 1.5 sys/arch/mvme68k/include/intr.h: revision 1.22 sys/arch/luna68k/include/intr.h: revision 1.16 external/cddl/osnet/sys/sys/kcondvar.h: revision 1.6 sys/arch/sparc/include/mutex.h: revision 1.12 sys/arch/sparc/include/mutex.h: revision 1.13 sys/arch/usermode/include/mutex.h: revision 1.5 sys/arch/usermode/include/mutex.h: revision 1.6 sys/kern/kern_core.c: revision 1.38 usr.sbin/crash/Makefile: revision 1.49 sys/arch/amiga/include/intr.h: revision 1.23 sys/arch/alpha/include/mutex.h: revision 1.12 sys/arch/alpha/include/mutex.h: revision 1.13 sys/arch/evbarm/lubbock/sacc_obio.c: revision 1.16 sys/ddb/ddb.h: revision 1.6 sys/arch/sparc64/include/mutex.h: revision 1.8 sys/arch/sh3/include/mutex.h: revision 1.12 sys/arch/evbarm/lubbock/sacc_obio.c: revision 1.17 sys/ddb/db_syncobj.c: revision 1.1 sys/arch/vax/include/mutex.h: revision 1.18 sys/arch/sparc64/include/psl.h: revision 1.63 sys/arch/sparc64/include/mutex.h: revision 1.9 sys/arch/sh3/include/mutex.h: revision 1.13 sys/arch/evbarm/lubbock/obio.c: revision 1.13 sys/arch/atari/include/intr.h: revision 1.23 sys/ddb/db_syncobj.c: revision 1.2 sys/arch/vax/include/mutex.h: revision 1.19 sys/arch/evbarm/g42xxeb/obio.c: revision 1.14 sys/arch/evbarm/g42xxeb/obio.c: revision 1.15 sys/arch/cesfic/include/intr.h: revision 1.14 sys/ddb/db_syncobj.h: revision 1.1 sys/arch/x86/include/cpu.h: revision 1.134 sys/arch/evbarm/g42xxeb/obio.c: revision 1.16 sys/arch/cesfic/include/intr.h: revision 1.15 sys/arch/arm/xscale/pxa2x0_intr.c: revision 1.26 sys/sys/cpu_data.h: revision 1.54 sys/arch/m68k/include/mutex.h: revision 1.12 sys/arch/ia64/acpi/madt.c: revision 1.6 sys/rwlock.h: Make this more self-contained for bool. machine/mutex.h: Sprinkle includes so this can be used by crash(8). ddb: New `show all tstiles' command. Shows who's waiting for which locks and what the owner is up to. Include psl.h for ipl_cookie_t if __MUTEX_PRIVATE sys: Rip <sys/resourcevar.h> out of <uvm/uvm_param.h>. And thus out of <sys/param.h>, which is exceedingly overused and fragile and delenda est. Should fix (some) issues with the recent inclusion of machine/lock.h in various machine/mutex.h files. arm/mutex.h: Need machine/intr.h, machine/lock.h. For ipl_cookie_t and __cpu_simple_lock_t. evbarm/intr.h: Define ipl_cookie_t before including ARM_INTR_IMPL. Otherwise arm/mutex.h doesn't work, due to a cyclic dependency which should really be fixed. opencrypto/cryptodev.h: Fix includes. - Move sys/condvar.h under #ifdef _KERNEL. - Add some other necessary includes and forward declarations. - Sort. hp300/intr.h: Fix missing includes. linux/idr.h: Need <sys/mutex.h> for kmutex_t. amiga/intr.h: Don't define spl*() functions if !_KERNEL. This is used by crash(8) now, and what's important is ipl_cookie_t. cesfic/intr.h: Expose ipl_cookie_t to userland for crash(8). cesfic/intr.h: Expose ipl_cookie_t to userland only with _KMEMUSER. Probably not necessary but let's be a little more cautious about this. atari/intr.h: Expose ipl_cookie_t with _KMEMUSER for crash(8). arm/cpu.h: Need sys/param.h for COHERENCY_UNIT. Nix machine/param.h -- not meant to be used directly, pulled in by sys/param.h. Move the definition of ipl_cookie_t out of the kernel-only sections, some _KMEMUSER applications need it. ddb: Cast pointer to uintptr_t first before db_expr_t. hppa/intr.h: Expose ipl_cookie_t to _KMEMUSER for crash(8). luna68k/intr.h: Expose ipl_cookie_t to _KMEMUSER for crash(8). mvme68k/intr.h: Expose ipl_cookie_t to _KMEMUSER for crash(8). news68k/intr.h: Fix includes. Put some definitions under _KERNEL. next68k/intr.h: Expose ipl_cookie_t to _KMEMUSER for crash(8). sys/ksem.h: Hack around fstat(8) abuse of _KERNEL. sun68k/intr.h: Expose ipl_cookie_t to _KMEMUSER for crash(8). vax/intr.h: Expose ipl_cookie_t to _KMEMUSER for crash(8). x68k/intr.h: Put functions under _KERNEL so crash(8) can use this. Make ipl_cookie_t visible for _KMEMUSER userland applications. fix editor mishap in previous Explicitly include <sys/mutex.h> for kmutex_t. Replace kmutex_t * (which may be undefined here) with struct kmutex *, suggested by Taylor. hp300/intr.h: Put most of this under #ifdef _KERNEL. Only ipl_cookie_t really needs to be exposed now, for crash(8). mac68k/intr.h: Expose ipl_cookie_t to _KMEMUSER for crash(8). Make inclusion of sys/intr.h explicit for spl*. fix hppa and vax builds. machine/lock.h isn't necessary for __cpu_simple_lock_t, it's in sys/types.h. avoids cpu_data.h vs sched.h include order issues. move the hppa ipl_t typedef with the moved usage of it. machine/mutex.h: Sprinkle sys/types.h, omit machine/lock.h. Turns out machine/lock.h is not needed for __cpu_simple_lock_t, which always comes from sys/types.h. And, really, sys/types.h (or at least sys/stdint.h) is needed for uintN_t and uintptr_t. ddb: Cast pointer to uintptr_t, then to db_expr_t. Avoids warnings about conversion between pointer and integer of different size on some architectures. re-fix hppa builds. this file uses __cpu_simple_lock(), not just the underlying type, so it does need machine/lock.h. Break cycle by using `struct kmutex *' instead of `kmutex_t *'. sys/sched.h included sys/mutex.h which includes sys/intr.h which includes machine/intr.h which on cats includes arm/footbridge/footbridge_intr.h which includes arm/cpu.h which includes sys/cpu_data.h which includes sys/sched.h But there was never any real need for sys/mutex.h in sys/sched.h, because it only uses pointers to the opaque struct kmutex. Cycle broken by using `struct kmutex *' instead of pulling in sys/mutex.h for the definition of kmutex_t. Side effect: This revealed that sys/cpu_data.h needed sys/intr.h (which was pulled in accidentally by sys/mutex.h via sys/sched.h) for SOFTINT_COUNT. Also revealed some other machine/cpu.h header files were missing includes of sys/mutex.h for kmutex_t. ia64: Need sys/types.h for u_int, vaddr_t; sys/mutex.h for kmutex_t. explicitly include no longer implicitly included sys/mutex.h. arm/xscale: Use sys/bitops.h fls32 - 1 instead of 31 - __builtin_clz. Sidesteps namespace collision with `#define bits ...' in net/zlib.c. complete the previous - there were two calls to find_first_bit() to fix. arm/xscale: Missed a spot with previous find_first_bit commit. evbarm/g42xxeb: Fix off-by-one in previous. The original find_first_bit(x) was 31 - __builtin_clz((uint32_t)x), which is equivalent to fls32(x) - 1, not to fls32(x). Note that fls32 is 1-based and returns 0 for x=0. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.5.2.1 src/external/cddl/osnet/sys/sys/kcondvar.h cvs rdiff -u -r1.202 -r1.202.2.1 src/share/man/man4/ddb.4 cvs rdiff -u -r1.11 -r1.11.4.1 src/sys/arch/alpha/include/mutex.h cvs rdiff -u -r1.37 -r1.37.4.1 src/sys/arch/amiga/dev/grfabs_cc.c cvs rdiff -u -r1.22 -r1.22.20.1 src/sys/arch/amiga/include/intr.h cvs rdiff -u -r1.123 -r1.123.4.1 src/sys/arch/arm/include/cpu.h cvs rdiff -u -r1.27 -r1.27.4.1 src/sys/arch/arm/include/mutex.h cvs rdiff -u -r1.25 -r1.25.2.1 src/sys/arch/arm/xscale/pxa2x0_intr.c cvs rdiff -u -r1.15 -r1.15.34.1 src/sys/arch/arm/xscale/pxa2x0_intr.h cvs rdiff -u -r1.22 -r1.22.16.1 src/sys/arch/atari/include/intr.h cvs rdiff -u -r1.13 -r1.13.78.1 src/sys/arch/cesfic/include/intr.h cvs rdiff -u -r1.13 -r1.13.6.1 src/sys/arch/evbarm/g42xxeb/obio.c cvs rdiff -u -r1.28 -r1.28.20.1 src/sys/arch/evbarm/include/intr.h cvs rdiff -u -r1.12 -r1.12.6.1 src/sys/arch/evbarm/lubbock/obio.c cvs rdiff -u -r1.15 -r1.15.6.1 src/sys/arch/evbarm/lubbock/sacc_obio.c cvs rdiff -u -r1.34 -r1.34.86.1 src/sys/arch/hp300/include/intr.h cvs rdiff -u -r1.2 -r1.2.4.1 src/sys/arch/hppa/include/intr.h cvs rdiff -u -r1.15 -r1.15.26.1 src/sys/arch/hppa/include/mutex.h cvs rdiff -u -r1.5 -r1.5.2.1 src/sys/arch/ia64/acpi/madt.c cvs rdiff -u -r1.7 -r1.7.4.1 src/sys/arch/ia64/include/mutex.h cvs rdiff -u -r1.1 -r1.1.96.1 src/sys/arch/ia64/include/sapicvar.h cvs rdiff -u -r1.15 -r1.15.60.1 src/sys/arch/luna68k/include/intr.h cvs rdiff -u -r1.11 -r1.11.4.1 src/sys/arch/m68k/include/mutex.h cvs rdiff -u -r1.31 -r1.31.112.1 src/sys/arch/mac68k/include/intr.h cvs rdiff -u -r1.9 -r1.9.4.1 src/sys/arch/mips/include/mutex.h cvs rdiff -u -r1.21 -r1.21.32.1 src/sys/arch/mvme68k/include/intr.h cvs rdiff -u -r1.27 -r1.27.32.1 src/sys/arch/news68k/include/intr.h cvs rdiff -u -r1.22 -r1.22.32.1 src/sys/arch/next68k/include/intr.h cvs rdiff -u -r1.3 -r1.3.4.1 src/sys/arch/or1k/include/mutex.h cvs rdiff -u -r1.6 -r1.6.26.1 src/sys/arch/powerpc/include/mutex.h cvs rdiff -u -r1.4 -r1.4.4.1 src/sys/arch/riscv/include/mutex.h cvs rdiff -u -r1.11 -r1.11.4.1 src/sys/arch/sh3/include/mutex.h cvs rdiff -u -r1.110 -r1.110.4.1 src/sys/arch/sparc/include/cpu.h cvs rdiff -u -r1.11 -r1.11.26.1 src/sys/arch/sparc/include/mutex.h cvs rdiff -u -r1.50 -r1.50.4.1 src/sys/arch/sparc/include/psl.h cvs rdiff -u -r1.133 -r1.133.4.1 src/sys/arch/sparc64/include/cpu.h cvs rdiff -u -r1.7 -r1.7.4.1 src/sys/arch/sparc64/include/mutex.h cvs rdiff -u -r1.62 -r1.62.4.1 src/sys/arch/sparc64/include/psl.h cvs rdiff -u -r1.20 -r1.20.114.1 src/sys/arch/sun68k/include/intr.h cvs rdiff -u -r1.4 -r1.4.26.1 src/sys/arch/usermode/include/mutex.h cvs rdiff -u -r1.30 -r1.30.4.1 src/sys/arch/vax/include/intr.h cvs rdiff -u -r1.17 -r1.17.4.1 src/sys/arch/vax/include/mutex.h cvs rdiff -u -r1.21 -r1.21.60.1 src/sys/arch/x68k/include/intr.h cvs rdiff -u -r1.133 -r1.133.4.1 src/sys/arch/x86/include/cpu.h cvs rdiff -u -r1.9 -r1.9.22.1 src/sys/arch/x86/include/mutex.h cvs rdiff -u -r1.181.4.1 -r1.181.4.2 src/sys/ddb/db_command.c cvs rdiff -u -r0 -r1.2.2.2 src/sys/ddb/db_syncobj.c cvs rdiff -u -r0 -r1.1.2.2 src/sys/ddb/db_syncobj.h cvs rdiff -u -r1.5 -r1.5.20.1 src/sys/ddb/ddb.h cvs rdiff -u -r1.15 -r1.15.4.1 src/sys/ddb/files.ddb cvs rdiff -u -r1.10 -r1.10.2.1 src/sys/external/bsd/drm2/include/linux/idr.h cvs rdiff -u -r1.37 -r1.37.4.1 src/sys/kern/kern_core.c cvs rdiff -u -r1.50 -r1.50.4.1 src/sys/opencrypto/cryptodev.h cvs rdiff -u -r1.52 -r1.52.20.1 src/sys/sys/cpu_data.h cvs rdiff -u -r1.15 -r1.15.30.1 src/sys/sys/ksem.h cvs rdiff -u -r1.8 -r1.8.48.1 src/sys/sys/lua.h cvs rdiff -u -r1.370.4.1 -r1.370.4.2 src/sys/sys/proc.h cvs rdiff -u -r1.17 -r1.17.2.1 src/sys/sys/rwlock.h cvs rdiff -u -r1.91 -r1.91.2.1 src/sys/sys/sched.h cvs rdiff -u -r1.41 -r1.41.20.1 src/sys/uvm/uvm_param.h cvs rdiff -u -r1.46.6.1 -r1.46.6.2 src/usr.sbin/crash/Makefile Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/cddl/osnet/sys/sys/kcondvar.h diff -u src/external/cddl/osnet/sys/sys/kcondvar.h:1.5 src/external/cddl/osnet/sys/sys/kcondvar.h:1.5.2.1 --- src/external/cddl/osnet/sys/sys/kcondvar.h:1.5 Sat Jul 30 12:59:31 2022 +++ src/external/cddl/osnet/sys/sys/kcondvar.h Wed Aug 9 17:42:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: kcondvar.h,v 1.5 2022/07/30 12:59:31 riastradh Exp $ */ +/* $NetBSD: kcondvar.h,v 1.5.2.1 2023/08/09 17:42:04 martin Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -48,7 +48,7 @@ typedef enum { #define cv_init(a, b, c, d) cv_init(a, #a) static inline clock_t -cv_timedwait_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim, hrtime_t res, +cv_timedwait_hires(kcondvar_t *cvp, struct kmutex *mp, hrtime_t tim, hrtime_t res, int flag) { extern int hz; @@ -58,7 +58,7 @@ cv_timedwait_hires(kcondvar_t *cvp, kmut } static inline clock_t -cv_reltimedwait(kcondvar_t *cvp, kmutex_t *mp, clock_t delta, time_res_t res) +cv_reltimedwait(kcondvar_t *cvp, struct kmutex *mp, clock_t delta, time_res_t res) { cv_wait(cvp, mp); @@ -67,7 +67,7 @@ cv_reltimedwait(kcondvar_t *cvp, kmutex_ #else -extern clock_t cv_timedwait_hires(kcondvar_t *, kmutex_t *, hrtime_t, hrtime_t, +extern clock_t cv_timedwait_hires(kcondvar_t *, struct kmutex *, hrtime_t, hrtime_t, int); #endif /* _KERNEL */ Index: src/share/man/man4/ddb.4 diff -u src/share/man/man4/ddb.4:1.202 src/share/man/man4/ddb.4:1.202.2.1 --- src/share/man/man4/ddb.4:1.202 Thu Apr 28 07:17:52 2022 +++ src/share/man/man4/ddb.4 Wed Aug 9 17:42:03 2023 @@ -1,4 +1,4 @@ -.\" $NetBSD: ddb.4,v 1.202 2022/04/28 07:17:52 msaitoh Exp $ +.\" $NetBSD: ddb.4,v 1.202.2.1 2023/08/09 17:42:03 martin Exp $ .\" .\" Copyright (c) 1997 - 2019 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -616,6 +616,14 @@ LWP name and wait channel message. LWPs currently running on a CPU are marked with the '\&>' sign. This is the default. .El +.It Ic show all tstiles Ns Oo Cm /t Oc +Display all lwps that are currently waiting in turnstiles to acquire +locks, which locks they are waiting for, and who currently holds them. +Valid modifiers: +.Bl -tag -width 3n +.It Cm /t +show a stack trace of the lwp that currently holds each lock +.El .It Ic show routes Dump the entire .Dv AF_INET Index: src/sys/arch/alpha/include/mutex.h diff -u src/sys/arch/alpha/include/mutex.h:1.11 src/sys/arch/alpha/include/mutex.h:1.11.4.1 --- src/sys/arch/alpha/include/mutex.h:1.11 Wed Aug 25 04:13:41 2021 +++ src/sys/arch/alpha/include/mutex.h Wed Aug 9 17:42:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.11 2021/08/25 04:13:41 thorpej Exp $ */ +/* $NetBSD: mutex.h,v 1.11.4.1 2023/08/09 17:42:05 martin Exp $ */ /*- * Copyright (c) 2002, 2006, 2007 The NetBSD Foundation, Inc. @@ -32,6 +32,8 @@ #ifndef _ALPHA_MUTEX_H_ #define _ALPHA_MUTEX_H_ +#include <sys/types.h> + #ifndef __MUTEX_PRIVATE struct kmutex { @@ -40,6 +42,8 @@ struct kmutex { #else /* __MUTEX_PRIVATE */ +#include <machine/intr.h> + struct kmutex { union { volatile uintptr_t mtxa_owner; Index: src/sys/arch/amiga/dev/grfabs_cc.c diff -u src/sys/arch/amiga/dev/grfabs_cc.c:1.37 src/sys/arch/amiga/dev/grfabs_cc.c:1.37.4.1 --- src/sys/arch/amiga/dev/grfabs_cc.c:1.37 Sat Mar 26 17:15:18 2022 +++ src/sys/arch/amiga/dev/grfabs_cc.c Wed Aug 9 17:42:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: grfabs_cc.c,v 1.37 2022/03/26 17:15:18 andvar Exp $ */ +/* $NetBSD: grfabs_cc.c,v 1.37.4.1 2023/08/09 17:42:03 martin Exp $ */ /* * Copyright (c) 1994 Christian E. Hopps @@ -38,12 +38,13 @@ #include "opt_amigaccgrf.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: grfabs_cc.c,v 1.37 2022/03/26 17:15:18 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: grfabs_cc.c,v 1.37.4.1 2023/08/09 17:42:03 martin Exp $"); #include <sys/param.h> #include <sys/systm.h> #include <sys/errno.h> #include <sys/queue.h> +#include <sys/intr.h> #include <amiga/amiga/custom.h> #include <amiga/amiga/cc.h> Index: src/sys/arch/amiga/include/intr.h diff -u src/sys/arch/amiga/include/intr.h:1.22 src/sys/arch/amiga/include/intr.h:1.22.20.1 --- src/sys/arch/amiga/include/intr.h:1.22 Mon Aug 10 10:59:33 2020 +++ src/sys/arch/amiga/include/intr.h Wed Aug 9 17:42:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.22 2020/08/10 10:59:33 rin Exp $ */ +/* $NetBSD: intr.h,v 1.22.20.1 2023/08/09 17:42:05 martin Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -58,6 +58,8 @@ typedef struct { uint16_t _ipl; } ipl_cookie_t; +#ifdef _KERNEL + static inline ipl_cookie_t makeiplcookie(ipl_t ipl) { @@ -105,4 +107,6 @@ extern int _spllkm7(void); #define splx(s) _spl(s) +#endif /* _KERNEL */ + #endif /* !_AMIGA_INTR_H_ */ Index: src/sys/arch/arm/include/cpu.h diff -u src/sys/arch/arm/include/cpu.h:1.123 src/sys/arch/arm/include/cpu.h:1.123.4.1 --- src/sys/arch/arm/include/cpu.h:1.123 Sat Jun 25 12:41:56 2022 +++ src/sys/arch/arm/include/cpu.h Wed Aug 9 17:42:01 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.h,v 1.123 2022/06/25 12:41:56 jmcneill Exp $ */ +/* $NetBSD: cpu.h,v 1.123.4.1 2023/08/09 17:42:01 martin Exp $ */ /* * Copyright (c) 1994-1996 Mark Brinicombe. @@ -150,6 +150,8 @@ static inline void set_curcpl(int); static inline void cpu_dosoftints(void); #endif +#include <sys/param.h> + #ifdef _KMEMUSER #include <sys/intr.h> #endif @@ -158,8 +160,6 @@ static inline void cpu_dosoftints(void); #include <sys/device_if.h> #include <sys/evcnt.h> -#include <machine/param.h> - /* * Cache info variables. */ Index: src/sys/arch/arm/include/mutex.h diff -u src/sys/arch/arm/include/mutex.h:1.27 src/sys/arch/arm/include/mutex.h:1.27.4.1 --- src/sys/arch/arm/include/mutex.h:1.27 Sun Dec 26 08:41:29 2021 +++ src/sys/arch/arm/include/mutex.h Wed Aug 9 17:42:01 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.27 2021/12/26 08:41:29 skrll Exp $ */ +/* $NetBSD: mutex.h,v 1.27.4.1 2023/08/09 17:42:01 martin Exp $ */ /*- * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc. @@ -32,6 +32,12 @@ #ifndef _ARM_MUTEX_H_ #define _ARM_MUTEX_H_ +#include <sys/types.h> + +#ifdef _KERNEL +#include <machine/intr.h> +#endif + /* * The ARM mutex implementation is troublesome, because pre-v6 ARM lacks a * compare-and-swap operation. However, there aren't any MP pre-v6 ARM Index: src/sys/arch/arm/xscale/pxa2x0_intr.c diff -u src/sys/arch/arm/xscale/pxa2x0_intr.c:1.25 src/sys/arch/arm/xscale/pxa2x0_intr.c:1.25.2.1 --- src/sys/arch/arm/xscale/pxa2x0_intr.c:1.25 Mon Oct 31 21:22:05 2022 +++ src/sys/arch/arm/xscale/pxa2x0_intr.c Wed Aug 9 17:42:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: pxa2x0_intr.c,v 1.25 2022/10/31 21:22:05 andvar Exp $ */ +/* $NetBSD: pxa2x0_intr.c,v 1.25.2.1 2023/08/09 17:42:04 martin Exp $ */ /* * Copyright (c) 2002 Genetec Corporation. All rights reserved. @@ -39,12 +39,14 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pxa2x0_intr.c,v 1.25 2022/10/31 21:22:05 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pxa2x0_intr.c,v 1.25.2.1 2023/08/09 17:42:04 martin Exp $"); #include <sys/param.h> #include <sys/systm.h> #include <sys/bus.h> +#include <sys/bitops.h> + #include <machine/intr.h> #include <machine/lock.h> @@ -161,7 +163,7 @@ pxa2x0_irq_handler(void *arg) /* get pending IRQs */ irqbits = read_icu(SAIPIC_IP); - while ((irqno = find_first_bit(irqbits)) >= 0) { + while ((irqno = fls32(irqbits) - 1) >= 0) { /* XXX: Should we handle IRQs in priority order? */ /* raise spl to stop interrupts of lower priorities */ Index: src/sys/arch/arm/xscale/pxa2x0_intr.h diff -u src/sys/arch/arm/xscale/pxa2x0_intr.h:1.15 src/sys/arch/arm/xscale/pxa2x0_intr.h:1.15.34.1 --- src/sys/arch/arm/xscale/pxa2x0_intr.h:1.15 Wed Jan 24 09:04:45 2018 +++ src/sys/arch/arm/xscale/pxa2x0_intr.h Wed Aug 9 17:42:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: pxa2x0_intr.h,v 1.15 2018/01/24 09:04:45 skrll Exp $ */ +/* $NetBSD: pxa2x0_intr.h,v 1.15.34.1 2023/08/09 17:42:04 martin Exp $ */ /* Derived from i80321_intr.h */ @@ -114,21 +114,6 @@ pxa2x0_spllower(int ipl) return old; } -/* - * An useful function for interrupt handlers. - * XXX: This shouldn't be here. - */ -static inline int -find_first_bit(uint32_t bits) -{ - /* - * Since CLZ is available only on ARMv5, this isn't portable - * to all ARM CPUs. This file is for PXA2[15]0 processor. - */ - return 31 - __builtin_clz(bits); -} - - int _splraise(int); int _spllower(int); void splx(int); Index: src/sys/arch/atari/include/intr.h diff -u src/sys/arch/atari/include/intr.h:1.22 src/sys/arch/atari/include/intr.h:1.22.16.1 --- src/sys/arch/atari/include/intr.h:1.22 Fri Apr 2 12:11:41 2021 +++ src/sys/arch/atari/include/intr.h Wed Aug 9 17:42:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.22 2021/04/02 12:11:41 rin Exp $ */ +/* $NetBSD: intr.h,v 1.22.16.1 2023/08/09 17:42:05 martin Exp $ */ /*- * Copyright (c) 1996, 1997, 2007 The NetBSD Foundation, Inc. @@ -48,6 +48,12 @@ #define IST_EDGE 2 /* edge-triggered */ #define IST_LEVEL 3 /* level-triggered */ +#if defined(_KERNEL) || defined(_KMEMUSER) +typedef struct { + uint16_t _psl; +} ipl_cookie_t; +#endif + /* * spl functions; all but spl0 are done in-line */ @@ -71,9 +77,6 @@ extern const uint16_t ipl2psl_table[NIPL extern int idepth; typedef int ipl_t; -typedef struct { - uint16_t _psl; -} ipl_cookie_t; static inline ipl_cookie_t makeiplcookie(ipl_t ipl) Index: src/sys/arch/cesfic/include/intr.h diff -u src/sys/arch/cesfic/include/intr.h:1.13 src/sys/arch/cesfic/include/intr.h:1.13.78.1 --- src/sys/arch/cesfic/include/intr.h:1.13 Thu Dec 22 15:06:17 2011 +++ src/sys/arch/cesfic/include/intr.h Wed Aug 9 17:42:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.13 2011/12/22 15:06:17 tsutsui Exp $ */ +/* $NetBSD: intr.h,v 1.13.78.1 2023/08/09 17:42:05 martin Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -46,6 +46,14 @@ */ #include <machine/psl.h> +#if (defined(_KERNEL) || defined(_KMEMUSER)) && !defined(_LOCORE) + +typedef struct { + uint16_t _psl; +} ipl_cookie_t; + +#endif + #if defined(_KERNEL) && !defined(_LOCORE) /* spl0 requires checking for software interrupts */ #define spl1() _spl(PSL_S|PSL_IPL1) @@ -83,9 +91,6 @@ int spl0(void); extern const uint16_t ipl2psl_table[NIPL]; typedef int ipl_t; -typedef struct { - uint16_t _psl; -} ipl_cookie_t; static inline ipl_cookie_t makeiplcookie(ipl_t ipl) Index: src/sys/arch/evbarm/g42xxeb/obio.c diff -u src/sys/arch/evbarm/g42xxeb/obio.c:1.13 src/sys/arch/evbarm/g42xxeb/obio.c:1.13.6.1 --- src/sys/arch/evbarm/g42xxeb/obio.c:1.13 Sat Aug 7 16:18:49 2021 +++ src/sys/arch/evbarm/g42xxeb/obio.c Wed Aug 9 17:42:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: obio.c,v 1.13 2021/08/07 16:18:49 thorpej Exp $ */ +/* $NetBSD: obio.c,v 1.13.6.1 2023/08/09 17:42:05 martin Exp $ */ /* * Copyright (c) 2002, 2003, 2005 Genetec corp. All rights reserved. @@ -35,6 +35,7 @@ #include <sys/device.h> #include <sys/kernel.h> #include <sys/reboot.h> +#include <sys/bitops.h> #include <machine/cpu.h> #include <sys/bus.h> @@ -98,7 +99,7 @@ obio_intr(void *arg) #endif for (pending = get_pending(sc); - (irqno = find_first_bit(pending)) >= 0; + (irqno = fls32(pending) - 1) >= 0; pending = get_pending(sc)) { /* reset pending bit */ @@ -155,7 +156,7 @@ obio_softint(void *arg) int psw; psw = disable_interrupts(I32_bit); - while ((irqno = find_first_bit(sc->sc_intr_pending)) >= 0) { + while ((irqno = fls32(sc->sc_intr_pending) - 1) >= 0) { sc->sc_intr_pending &= ~(1U<<irqno); restore_interrupts(psw); Index: src/sys/arch/evbarm/include/intr.h diff -u src/sys/arch/evbarm/include/intr.h:1.28 src/sys/arch/evbarm/include/intr.h:1.28.20.1 --- src/sys/arch/evbarm/include/intr.h:1.28 Mon Jul 27 10:37:58 2020 +++ src/sys/arch/evbarm/include/intr.h Wed Aug 9 17:42:02 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.28 2020/07/27 10:37:58 skrll Exp $ */ +/* $NetBSD: intr.h,v 1.28.20.1 2023/08/09 17:42:02 martin Exp $ */ /* * Copyright (c) 2001, 2003 Wasabi Systems, Inc. @@ -71,6 +71,11 @@ #include <sys/queue.h> +typedef uint8_t ipl_t; +typedef struct { + ipl_t _ipl; +} ipl_cookie_t; + #if defined(_MODULE) int _splraise(int); @@ -124,11 +129,6 @@ void splx(int); #endif /* _MODULE */ -typedef uint8_t ipl_t; -typedef struct { - ipl_t _ipl; -} ipl_cookie_t; - static inline ipl_cookie_t makeiplcookie(ipl_t ipl) { Index: src/sys/arch/evbarm/lubbock/obio.c diff -u src/sys/arch/evbarm/lubbock/obio.c:1.12 src/sys/arch/evbarm/lubbock/obio.c:1.12.6.1 --- src/sys/arch/evbarm/lubbock/obio.c:1.12 Sat Aug 7 16:18:50 2021 +++ src/sys/arch/evbarm/lubbock/obio.c Wed Aug 9 17:42:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: obio.c,v 1.12 2021/08/07 16:18:50 thorpej Exp $ */ +/* $NetBSD: obio.c,v 1.12.6.1 2023/08/09 17:42:05 martin Exp $ */ /* * Copyright (c) 2002, 2003 Genetec Corporation. All rights reserved. @@ -35,13 +35,14 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: obio.c,v 1.12 2021/08/07 16:18:50 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: obio.c,v 1.12.6.1 2023/08/09 17:42:05 martin Exp $"); #include <sys/param.h> #include <sys/systm.h> #include <sys/device.h> #include <sys/kernel.h> #include <sys/reboot.h> +#include <sys/bitops.h> #include <machine/cpu.h> #include <sys/bus.h> @@ -163,7 +164,7 @@ obio_softintr(void *arg) int spl_save = curcpl(); psw = disable_interrupts(I32_bit); - while ((irqno = find_first_bit(sc->sc_obio_intr_pending)) >= 0) { + while ((irqno = fls32(sc->sc_obio_intr_pending) - 1) >= 0) { sc->sc_obio_intr_pending &= ~(1U<<irqno); restore_interrupts(psw); Index: src/sys/arch/evbarm/lubbock/sacc_obio.c diff -u src/sys/arch/evbarm/lubbock/sacc_obio.c:1.15 src/sys/arch/evbarm/lubbock/sacc_obio.c:1.15.6.1 --- src/sys/arch/evbarm/lubbock/sacc_obio.c:1.15 Sat Aug 7 16:18:50 2021 +++ src/sys/arch/evbarm/lubbock/sacc_obio.c Wed Aug 9 17:42:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: sacc_obio.c,v 1.15 2021/08/07 16:18:50 thorpej Exp $ */ +/* $NetBSD: sacc_obio.c,v 1.15.6.1 2023/08/09 17:42:05 martin Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sacc_obio.c,v 1.15 2021/08/07 16:18:50 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sacc_obio.c,v 1.15.6.1 2023/08/09 17:42:05 martin Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -45,6 +45,7 @@ __KERNEL_RCSID(0, "$NetBSD: sacc_obio.c, #include <sys/syslog.h> #include <sys/select.h> #include <sys/device.h> +#include <sys/bitops.h> #include <net/if.h> #include <net/if_dl.h> @@ -197,7 +198,7 @@ sacc_obio_intr(void *arg) bus_space_read_4(sc->sc_iot, sc->sc_ioh, SACCIC_INTSTATCLR1); DPRINTF(("sacc_obio_intr_dispatch: %x %x\n", intstat.lo, intstat.hi)); - while ((i = find_first_bit(intstat.lo)) >= 0) { + while ((i = fls32(intstat.lo) - 1) >= 0) { /* * Clear intr status before calling intr handlers. @@ -213,7 +214,7 @@ sacc_obio_intr(void *arg) intstat.lo &= ~(1U<<i); } - while ((i = find_first_bit(intstat.hi)) >= 0) { + while ((i = fls32(intstat.hi) - 1) >= 0) { bus_space_write_4(sc->sc_iot, sc->sc_ioh, SACCIC_INTSTATCLR1, 1U<<i); Index: src/sys/arch/hp300/include/intr.h diff -u src/sys/arch/hp300/include/intr.h:1.34 src/sys/arch/hp300/include/intr.h:1.34.86.1 --- src/sys/arch/hp300/include/intr.h:1.34 Sun Mar 6 14:51:22 2011 +++ src/sys/arch/hp300/include/intr.h Wed Aug 9 17:42:02 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.34 2011/03/06 14:51:22 tsutsui Exp $ */ +/* $NetBSD: intr.h,v 1.34.86.1 2023/08/09 17:42:02 martin Exp $ */ /*- * Copyright (c) 1996, 1997, 1999 The NetBSD Foundation, Inc. @@ -32,8 +32,12 @@ #ifndef _HP300_INTR_H_ #define _HP300_INTR_H_ +#include <sys/types.h> + #include <sys/evcnt.h> #include <sys/queue.h> +#include <sys/stdbool.h> + #include <machine/psl.h> /* @@ -78,6 +82,8 @@ typedef struct { uint16_t _psl; } ipl_cookie_t; +#ifdef _KERNEL + static inline ipl_cookie_t makeiplcookie(ipl_t ipl) { @@ -133,4 +139,6 @@ void *intr_establish(int (*)(void *), vo void intr_disestablish(void *); void intr_dispatch(int); +#endif /* _KERNEL */ + #endif /* _HP300_INTR_H_ */ Index: src/sys/arch/hppa/include/intr.h diff -u src/sys/arch/hppa/include/intr.h:1.2 src/sys/arch/hppa/include/intr.h:1.2.4.1 --- src/sys/arch/hppa/include/intr.h:1.2 Sat Feb 26 03:02:25 2022 +++ src/sys/arch/hppa/include/intr.h Wed Aug 9 17:42:02 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.2 2022/02/26 03:02:25 macallan Exp $ */ +/* $NetBSD: intr.h,v 1.2.4.1 2023/08/09 17:42:02 martin Exp $ */ /* $OpenBSD: intr.h,v 1.26 2009/12/29 13:11:40 jsing Exp $ */ /*- @@ -40,6 +40,13 @@ #ifndef _LOCORE +#if defined(_KERNEL) || defined(_KMEMUSER) +typedef int ipl_t; +typedef struct { + ipl_t _ipl; +} ipl_cookie_t; +#endif + #ifdef _KERNEL struct cpu_info; @@ -156,11 +163,6 @@ void spllower(int); #define spl0() spllower(0) #define splx(x) spllower(x) -typedef int ipl_t; -typedef struct { - ipl_t _ipl; -} ipl_cookie_t; - static inline ipl_cookie_t makeiplcookie(ipl_t ipl) { Index: src/sys/arch/hppa/include/mutex.h diff -u src/sys/arch/hppa/include/mutex.h:1.15 src/sys/arch/hppa/include/mutex.h:1.15.26.1 --- src/sys/arch/hppa/include/mutex.h:1.15 Tue Jan 7 13:44:23 2020 +++ src/sys/arch/hppa/include/mutex.h Wed Aug 9 17:42:02 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.15 2020/01/07 13:44:23 ad Exp $ */ +/* $NetBSD: mutex.h,v 1.15.26.1 2023/08/09 17:42:02 martin Exp $ */ /*- * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc. @@ -42,7 +42,12 @@ #ifndef __ASSEMBLER__ +#include <sys/types.h> + +#ifdef __MUTEX_PRIVATE #include <machine/lock.h> +#include <machine/intr.h> +#endif struct kmutex { union { @@ -82,7 +87,7 @@ struct kmutex { #define MUTEX_SPIN_FLAG 0xffffff10 #define MUTEX_UNOWNED_OR_SPIN(x) (((x) & 0xffffffef) == 0xffffff00) -#ifndef __ASSEMBLER__ +#if !defined(__ASSEMBLER__) && defined(_KERNEL) static inline uintptr_t MUTEX_OWNER(uintptr_t owner) @@ -177,7 +182,7 @@ MUTEX_CLEAR_WAITERS(struct kmutex *mtx) mtx->mtx_waiters = 0; } -#endif /* __ASSEMBLER__ */ +#endif /* !__ASSEMBLER__ && _KERNEL */ #endif /* __MUTEX_PRIVATE */ Index: src/sys/arch/ia64/acpi/madt.c diff -u src/sys/arch/ia64/acpi/madt.c:1.5 src/sys/arch/ia64/acpi/madt.c:1.5.2.1 --- src/sys/arch/ia64/acpi/madt.c:1.5 Mon Dec 12 01:07:52 2022 +++ src/sys/arch/ia64/acpi/madt.c Wed Aug 9 17:42:06 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: madt.c,v 1.5 2022/12/12 01:07:52 gutteridge Exp $ */ +/* $NetBSD: madt.c,v 1.5.2.1 2023/08/09 17:42:06 martin Exp $ */ /*- * Copyright (c) 2001 Doug Rabson * All rights reserved. @@ -29,6 +29,7 @@ #include <sys/param.h> #include <sys/reboot.h> +#include <sys/mutex.h> #include <machine/md_var.h> #include <machine/sapicvar.h> Index: src/sys/arch/ia64/include/mutex.h diff -u src/sys/arch/ia64/include/mutex.h:1.7 src/sys/arch/ia64/include/mutex.h:1.7.4.1 --- src/sys/arch/ia64/include/mutex.h:1.7 Wed Apr 6 22:47:57 2022 +++ src/sys/arch/ia64/include/mutex.h Wed Aug 9 17:42:02 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.7 2022/04/06 22:47:57 riastradh Exp $ */ +/* $NetBSD: mutex.h,v 1.7.4.1 2023/08/09 17:42:02 martin Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -32,6 +32,8 @@ #ifndef _IA64_MUTEX_H_ #define _IA64_MUTEX_H_ +#include <sys/types.h> + #ifndef __MUTEX_PRIVATE struct kmutex { @@ -41,6 +43,8 @@ struct kmutex { #else +#include <machine/intr.h> + struct kmutex { volatile uintptr_t mtx_owner; ipl_cookie_t mtx_ipl; Index: src/sys/arch/ia64/include/sapicvar.h diff -u src/sys/arch/ia64/include/sapicvar.h:1.1 src/sys/arch/ia64/include/sapicvar.h:1.1.96.1 --- src/sys/arch/ia64/include/sapicvar.h:1.1 Mon Jul 20 04:41:37 2009 +++ src/sys/arch/ia64/include/sapicvar.h Wed Aug 9 17:42:02 2023 @@ -29,6 +29,10 @@ #ifndef _MACHINE_SAPICVAR_H_ #define _MACHINE_SAPICVAR_H_ +#include <sys/types.h> + +#include <sys/mutex.h> + struct sapic { kmutex_t sa_mtx; vaddr_t sa_registers; /* virtual address of sapic */ Index: src/sys/arch/luna68k/include/intr.h diff -u src/sys/arch/luna68k/include/intr.h:1.15 src/sys/arch/luna68k/include/intr.h:1.15.60.1 --- src/sys/arch/luna68k/include/intr.h:1.15 Sat Mar 22 16:52:07 2014 +++ src/sys/arch/luna68k/include/intr.h Wed Aug 9 17:42:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.15 2014/03/22 16:52:07 tsutsui Exp $ */ +/* $NetBSD: intr.h,v 1.15.60.1 2023/08/09 17:42:04 martin Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. @@ -32,6 +32,12 @@ #ifndef _MACHINE_INTR_H #define _MACHINE_INTR_H +#if defined(_KERNEL) || defined(_KMEMUSER) +typedef struct { + uint16_t _psl; +} ipl_cookie_t; +#endif + #ifdef _KERNEL /* @@ -62,9 +68,6 @@ extern const uint16_t ipl2psl_table[NIPL]; typedef int ipl_t; -typedef struct { - uint16_t _psl; -} ipl_cookie_t; static inline ipl_cookie_t makeiplcookie(ipl_t ipl) Index: src/sys/arch/m68k/include/mutex.h diff -u src/sys/arch/m68k/include/mutex.h:1.11 src/sys/arch/m68k/include/mutex.h:1.11.4.1 --- src/sys/arch/m68k/include/mutex.h:1.11 Wed Aug 25 04:13:41 2021 +++ src/sys/arch/m68k/include/mutex.h Wed Aug 9 17:42:01 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.11 2021/08/25 04:13:41 thorpej Exp $ */ +/* $NetBSD: mutex.h,v 1.11.4.1 2023/08/09 17:42:01 martin Exp $ */ /*- * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc. @@ -32,6 +32,8 @@ #ifndef _M68K_MUTEX_H_ #define _M68K_MUTEX_H_ +#include <sys/types.h> + #ifndef __MUTEX_PRIVATE struct kmutex { @@ -40,7 +42,7 @@ struct kmutex { #else /* __MUTEX_PRIVATE */ -#include <machine/lock.h> +#include <machine/intr.h> struct kmutex { union { Index: src/sys/arch/mac68k/include/intr.h diff -u src/sys/arch/mac68k/include/intr.h:1.31 src/sys/arch/mac68k/include/intr.h:1.31.112.1 --- src/sys/arch/mac68k/include/intr.h:1.31 Thu Jul 17 16:13:33 2008 +++ src/sys/arch/mac68k/include/intr.h Wed Aug 9 17:42:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.31 2008/07/17 16:13:33 tsutsui Exp $ */ +/* $NetBSD: intr.h,v 1.31.112.1 2023/08/09 17:42:03 martin Exp $ */ /* * Copyright (C) 1997 Scott Reynolds @@ -32,6 +32,12 @@ #include <machine/psl.h> +#if defined(_KERNEL) || defined(_KMEMUSER) +typedef struct { + uint16_t _ipl; +} ipl_cookie_t; +#endif + #ifdef _KERNEL /* spl0 requires checking for software interrupts */ @@ -66,9 +72,6 @@ extern uint16_t ipl2psl_table[NIPL]; typedef int ipl_t; -typedef struct { - uint16_t _ipl; -} ipl_cookie_t; static inline ipl_cookie_t makeiplcookie(ipl_t ipl) Index: src/sys/arch/mips/include/mutex.h diff -u src/sys/arch/mips/include/mutex.h:1.9 src/sys/arch/mips/include/mutex.h:1.9.4.1 --- src/sys/arch/mips/include/mutex.h:1.9 Wed Aug 25 04:13:41 2021 +++ src/sys/arch/mips/include/mutex.h Wed Aug 9 17:42:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.9 2021/08/25 04:13:41 thorpej Exp $ */ +/* $NetBSD: mutex.h,v 1.9.4.1 2023/08/09 17:42:04 martin Exp $ */ /*- * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc. @@ -32,6 +32,8 @@ #ifndef _MIPS_MUTEX_H_ #define _MIPS_MUTEX_H_ +#include <sys/types.h> + #ifndef __MUTEX_PRIVATE struct kmutex { @@ -41,9 +43,7 @@ struct kmutex { #else /* __MUTEX_PRIVATE */ -#ifdef __MUTEX_PRIVATE -#include <machine/lock.h> -#endif +#include <machine/intr.h> struct kmutex { volatile uintptr_t mtx_owner; Index: src/sys/arch/mvme68k/include/intr.h diff -u src/sys/arch/mvme68k/include/intr.h:1.21 src/sys/arch/mvme68k/include/intr.h:1.21.32.1 --- src/sys/arch/mvme68k/include/intr.h:1.21 Thu Apr 19 21:50:07 2018 +++ src/sys/arch/mvme68k/include/intr.h Wed Aug 9 17:42:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.21 2018/04/19 21:50:07 christos Exp $ */ +/* $NetBSD: intr.h,v 1.21.32.1 2023/08/09 17:42:04 martin Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. @@ -44,6 +44,12 @@ #define IPL_HIGH 7 #define NIPL 8 +#if defined(_KERNEL) || defined(_KMEMUSER) +typedef struct { + uint16_t _psl; +} ipl_cookie_t; +#endif + #ifdef _KERNEL #define spl0() _spl0() #define splsoftclock() splraise1() @@ -59,9 +65,6 @@ extern const uint16_t ipl2psl_table[NIPL]; typedef int ipl_t; -typedef struct { - uint16_t _psl; -} ipl_cookie_t; static __inline ipl_cookie_t makeiplcookie(ipl_t ipl) Index: src/sys/arch/news68k/include/intr.h diff -u src/sys/arch/news68k/include/intr.h:1.27 src/sys/arch/news68k/include/intr.h:1.27.32.1 --- src/sys/arch/news68k/include/intr.h:1.27 Thu Apr 19 21:50:07 2018 +++ src/sys/arch/news68k/include/intr.h Wed Aug 9 17:42:02 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.27 2018/04/19 21:50:07 christos Exp $ */ +/* $NetBSD: intr.h,v 1.27.32.1 2023/08/09 17:42:02 martin Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -32,9 +32,14 @@ #ifndef _NEWS68K_INTR_H_ #define _NEWS68K_INTR_H_ +#include <sys/types.h> + #include <sys/evcnt.h> #include <sys/queue.h> +#include <sys/stdbool.h> + #include <machine/psl.h> + #include <m68k/asm_single.h> #define IPL_NONE 0 @@ -63,6 +68,8 @@ typedef struct { uint16_t _psl; } ipl_cookie_t; +#ifdef _KERNEL + static __inline ipl_cookie_t makeiplcookie(ipl_t ipl) { @@ -98,4 +105,6 @@ splx(int sr) #define splhigh() spl7() #define splsched() spl7() +#endif + #endif /* _NEWS68K_INTR_H_ */ Index: src/sys/arch/next68k/include/intr.h diff -u src/sys/arch/next68k/include/intr.h:1.22 src/sys/arch/next68k/include/intr.h:1.22.32.1 --- src/sys/arch/next68k/include/intr.h:1.22 Thu Apr 19 21:50:07 2018 +++ src/sys/arch/next68k/include/intr.h Wed Aug 9 17:42:02 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.22 2018/04/19 21:50:07 christos Exp $ */ +/* $NetBSD: intr.h,v 1.22.32.1 2023/08/09 17:42:02 martin Exp $ */ /* * Copyright (C) 1997 Scott Reynolds @@ -35,6 +35,12 @@ /* Probably want to dealwith IPL's here @@@ */ +#if defined(_KERNEL) || defined(_KMEMUSER) +typedef struct { + uint16_t _psl; +} ipl_cookie_t; +#endif + #ifdef _KERNEL /* spl0 requires checking for software interrupts */ @@ -67,9 +73,6 @@ extern const uint16_t ipl2psl_table[NIPL]; typedef int ipl_t; -typedef struct { - uint16_t _psl; -} ipl_cookie_t; static __inline ipl_cookie_t makeiplcookie(ipl_t ipl) Index: src/sys/arch/or1k/include/mutex.h diff -u src/sys/arch/or1k/include/mutex.h:1.3 src/sys/arch/or1k/include/mutex.h:1.3.4.1 --- src/sys/arch/or1k/include/mutex.h:1.3 Wed Aug 25 04:13:41 2021 +++ src/sys/arch/or1k/include/mutex.h Wed Aug 9 17:42:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.3 2021/08/25 04:13:41 thorpej Exp $ */ +/* $NetBSD: mutex.h,v 1.3.4.1 2023/08/09 17:42:04 martin Exp $ */ /*- * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc. @@ -32,6 +32,8 @@ #ifndef _OR1K_MUTEX_H_ #define _OR1K_MUTEX_H_ +#include <sys/types.h> + #ifndef __MUTEX_PRIVATE struct kmutex { @@ -40,6 +42,8 @@ struct kmutex { #else /* __MUTEX_PRIVATE */ +#include <machine/intr.h> + struct kmutex { union { /* Adaptive mutex */ Index: src/sys/arch/powerpc/include/mutex.h diff -u src/sys/arch/powerpc/include/mutex.h:1.6 src/sys/arch/powerpc/include/mutex.h:1.6.26.1 --- src/sys/arch/powerpc/include/mutex.h:1.6 Fri Nov 29 22:55:34 2019 +++ src/sys/arch/powerpc/include/mutex.h Wed Aug 9 17:42:01 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.6 2019/11/29 22:55:34 riastradh Exp $ */ +/* $NetBSD: mutex.h,v 1.6.26.1 2023/08/09 17:42:01 martin Exp $ */ /*- * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc. @@ -32,8 +32,11 @@ #ifndef _POWERPC_MUTEX_H_ #define _POWERPC_MUTEX_H_ +#include <sys/types.h> + #ifdef __MUTEX_PRIVATE -#include <machine/lock.h> +#include <sys/intr.h> +#include <machine/intr.h> #endif struct kmutex { Index: src/sys/arch/riscv/include/mutex.h diff -u src/sys/arch/riscv/include/mutex.h:1.4 src/sys/arch/riscv/include/mutex.h:1.4.4.1 --- src/sys/arch/riscv/include/mutex.h:1.4 Wed Aug 25 04:13:41 2021 +++ src/sys/arch/riscv/include/mutex.h Wed Aug 9 17:42:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.4 2021/08/25 04:13:41 thorpej Exp $ */ +/* $NetBSD: mutex.h,v 1.4.4.1 2023/08/09 17:42:03 martin Exp $ */ /*- * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc. @@ -32,6 +32,8 @@ #ifndef _RISCV_MUTEX_H_ #define _RISCV_MUTEX_H_ +#include <sys/types.h> + #ifndef __MUTEX_PRIVATE struct kmutex { @@ -40,8 +42,12 @@ struct kmutex { #else /* __MUTEX_PRIVATE */ +#include <sys/cdefs.h> + #include <sys/param.h> +#include <machine/intr.h> + struct kmutex { volatile uintptr_t mtx_owner; }; Index: src/sys/arch/sh3/include/mutex.h diff -u src/sys/arch/sh3/include/mutex.h:1.11 src/sys/arch/sh3/include/mutex.h:1.11.4.1 --- src/sys/arch/sh3/include/mutex.h:1.11 Wed Aug 25 04:13:42 2021 +++ src/sys/arch/sh3/include/mutex.h Wed Aug 9 17:42:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.11 2021/08/25 04:13:42 thorpej Exp $ */ +/* $NetBSD: mutex.h,v 1.11.4.1 2023/08/09 17:42:05 martin Exp $ */ /*- * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc. @@ -32,6 +32,8 @@ #ifndef _SH3_MUTEX_H_ #define _SH3_MUTEX_H_ +#include <sys/types.h> + #ifndef __MUTEX_PRIVATE struct kmutex { @@ -40,6 +42,8 @@ struct kmutex { #else /* __MUTEX_PRIVATE */ +#include <machine/intr.h> + struct kmutex { union { /* Adaptive mutex */ Index: src/sys/arch/sparc/include/cpu.h diff -u src/sys/arch/sparc/include/cpu.h:1.110 src/sys/arch/sparc/include/cpu.h:1.110.4.1 --- src/sys/arch/sparc/include/cpu.h:1.110 Sat Aug 14 17:51:19 2021 +++ src/sys/arch/sparc/include/cpu.h Wed Aug 9 17:42:02 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.h,v 1.110 2021/08/14 17:51:19 ryo Exp $ */ +/* $NetBSD: cpu.h,v 1.110.4.1 2023/08/09 17:42:02 martin Exp $ */ /* * Copyright (c) 1992, 1993 @@ -407,6 +407,8 @@ struct cpu_info { /* Kernel only things. */ #if defined(_KERNEL) +#include <sys/mutex.h> + /* * definitions of cpu-dependent requirements * referenced in generic code Index: src/sys/arch/sparc/include/mutex.h diff -u src/sys/arch/sparc/include/mutex.h:1.11 src/sys/arch/sparc/include/mutex.h:1.11.26.1 --- src/sys/arch/sparc/include/mutex.h:1.11 Fri Nov 29 22:55:34 2019 +++ src/sys/arch/sparc/include/mutex.h Wed Aug 9 17:42:02 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.11 2019/11/29 22:55:34 riastradh Exp $ */ +/* $NetBSD: mutex.h,v 1.11.26.1 2023/08/09 17:42:02 martin Exp $ */ /*- * Copyright (c) 2002, 2006 The NetBSD Foundation, Inc. @@ -32,7 +32,11 @@ #ifndef _SPARC_MUTEX_H_ #define _SPARC_MUTEX_H_ +#include <sys/types.h> + #ifdef __MUTEX_PRIVATE +#include <machine/intr.h> + #include "psl.h" #endif Index: src/sys/arch/sparc/include/psl.h diff -u src/sys/arch/sparc/include/psl.h:1.50 src/sys/arch/sparc/include/psl.h:1.50.4.1 --- src/sys/arch/sparc/include/psl.h:1.50 Tue Nov 2 11:26:04 2021 +++ src/sys/arch/sparc/include/psl.h Wed Aug 9 17:42:02 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: psl.h,v 1.50 2021/11/02 11:26:04 ryo Exp $ */ +/* $NetBSD: psl.h,v 1.50.4.1 2023/08/09 17:42:02 martin Exp $ */ /* * Copyright (c) 1992, 1993 @@ -227,6 +227,13 @@ #define SPARC64_BLOCK_SIZE 64 #define SPARC64_BLOCK_ALIGN 0x3f +#if (defined(_KERNEL) || defined(_KMEMUSER)) && !defined(_LOCORE) +typedef uint8_t ipl_t; +typedef struct { + ipl_t _ipl; +} ipl_cookie_t; +#endif /* _KERNEL|_KMEMUSER & !_LOCORE */ + #if defined(_KERNEL) && !defined(_LOCORE) /* @@ -296,11 +303,6 @@ static __inline __attribute__((__always_ _SPLSET(spllowerschedclock, IPL_SCHED) -typedef uint8_t ipl_t; -typedef struct { - ipl_t _ipl; -} ipl_cookie_t; - static inline __always_inline ipl_cookie_t makeiplcookie(ipl_t ipl) { Index: src/sys/arch/sparc64/include/cpu.h diff -u src/sys/arch/sparc64/include/cpu.h:1.133 src/sys/arch/sparc64/include/cpu.h:1.133.4.1 --- src/sys/arch/sparc64/include/cpu.h:1.133 Sat Aug 14 17:51:19 2021 +++ src/sys/arch/sparc64/include/cpu.h Wed Aug 9 17:42:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.h,v 1.133 2021/08/14 17:51:19 ryo Exp $ */ +/* $NetBSD: cpu.h,v 1.133.4.1 2023/08/09 17:42:03 martin Exp $ */ /* * Copyright (c) 1992, 1993 @@ -89,6 +89,7 @@ struct cacheinfo { #endif #include <sys/cpu_data.h> +#include <sys/mutex.h> #include <sys/evcnt.h> /* Index: src/sys/arch/sparc64/include/mutex.h diff -u src/sys/arch/sparc64/include/mutex.h:1.7 src/sys/arch/sparc64/include/mutex.h:1.7.4.1 --- src/sys/arch/sparc64/include/mutex.h:1.7 Wed Aug 25 04:13:41 2021 +++ src/sys/arch/sparc64/include/mutex.h Wed Aug 9 17:42:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.7 2021/08/25 04:13:41 thorpej Exp $ */ +/* $NetBSD: mutex.h,v 1.7.4.1 2023/08/09 17:42:03 martin Exp $ */ /*- * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc. @@ -32,6 +32,13 @@ #ifndef _SPARC64_MUTEX_H_ #define _SPARC64_MUTEX_H_ +#include <sys/types.h> + +#ifdef __MUTEX_PRIVATE +#include <machine/intr.h> +#include <machine/psl.h> +#endif + struct kmutex { union { volatile uintptr_t mtxa_owner; Index: src/sys/arch/sparc64/include/psl.h diff -u src/sys/arch/sparc64/include/psl.h:1.62 src/sys/arch/sparc64/include/psl.h:1.62.4.1 --- src/sys/arch/sparc64/include/psl.h:1.62 Tue Nov 2 11:26:04 2021 +++ src/sys/arch/sparc64/include/psl.h Wed Aug 9 17:42:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: psl.h,v 1.62 2021/11/02 11:26:04 ryo Exp $ */ +/* $NetBSD: psl.h,v 1.62.4.1 2023/08/09 17:42:03 martin Exp $ */ /* * Copyright (c) 1992, 1993 @@ -282,6 +282,14 @@ #define SPARC64_BLOCK_SIZE 64 #define SPARC64_BLOCK_ALIGN 0x3f + +#if (defined(_KERNEL) || defined(_KMEMUSER)) && !defined(_LOCORE) +typedef uint8_t ipl_t; +typedef struct { + ipl_t _ipl; +} ipl_cookie_t; +#endif /* _KERNEL|_KMEMUSER&!_LOCORE */ + #if defined(_KERNEL) && !defined(_LOCORE) #if defined(_KERNEL_OPT) @@ -474,11 +482,6 @@ static __inline __always_inline int name } #endif -typedef uint8_t ipl_t; -typedef struct { - ipl_t _ipl; -} ipl_cookie_t; - static __inline ipl_cookie_t makeiplcookie(ipl_t ipl) { Index: src/sys/arch/sun68k/include/intr.h diff -u src/sys/arch/sun68k/include/intr.h:1.20 src/sys/arch/sun68k/include/intr.h:1.20.114.1 --- src/sys/arch/sun68k/include/intr.h:1.20 Sun Jun 22 17:34:25 2008 +++ src/sys/arch/sun68k/include/intr.h Wed Aug 9 17:42:01 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.20 2008/06/22 17:34:25 tsutsui Exp $ */ +/* $NetBSD: intr.h,v 1.20.114.1 2023/08/09 17:42:01 martin Exp $ */ /* * Copyright (c) 2001 Matt Fredette. @@ -55,6 +55,12 @@ #define _IPL_SOFT_LEVEL_MIN 1 #define _IPL_SOFT_LEVEL_MAX 3 +#if defined(_KERNEL) || defined(_KMEMUSER) +typedef struct { + uint16_t _psl; +} ipl_cookie_t; +#endif + #ifdef _KERNEL extern int idepth; @@ -69,9 +75,6 @@ cpu_intr_p(void) extern const uint16_t ipl2psl_table[NIPL]; typedef int ipl_t; -typedef struct { - uint16_t _psl; -} ipl_cookie_t; static inline ipl_cookie_t makeiplcookie(ipl_t ipl) Index: src/sys/arch/usermode/include/mutex.h diff -u src/sys/arch/usermode/include/mutex.h:1.4 src/sys/arch/usermode/include/mutex.h:1.4.26.1 --- src/sys/arch/usermode/include/mutex.h:1.4 Fri Nov 29 22:55:34 2019 +++ src/sys/arch/usermode/include/mutex.h Wed Aug 9 17:42:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.4 2019/11/29 22:55:34 riastradh Exp $ */ +/* $NetBSD: mutex.h,v 1.4.26.1 2023/08/09 17:42:04 martin Exp $ */ /*- * Copyright (c) 2002, 2006 The NetBSD Foundation, Inc. @@ -32,6 +32,12 @@ #ifndef _ARCH_USERMODE_INCLUDE_MUTEX_H_ #define _ARCH_USERMODE_INCLUDE_MUTEX_H_ +#include <sys/types.h> + +#ifdef __MUTEX_PRIVATE +#include <machine/intr.h> +#endif + struct kmutex { union { volatile uintptr_t mtxa_owner; Index: src/sys/arch/vax/include/intr.h diff -u src/sys/arch/vax/include/intr.h:1.30 src/sys/arch/vax/include/intr.h:1.30.4.1 --- src/sys/arch/vax/include/intr.h:1.30 Tue Nov 2 11:26:05 2021 +++ src/sys/arch/vax/include/intr.h Wed Aug 9 17:42:02 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.30 2021/11/02 11:26:05 ryo Exp $ */ +/* $NetBSD: intr.h,v 1.30.4.1 2023/08/09 17:42:02 martin Exp $ */ /* * Copyright (c) 1998 Matt Thomas. @@ -65,6 +65,11 @@ #define IST_EDGE 2 /* edge-triggered */ #define IST_LEVEL 3 /* level-triggered */ +#if defined(_KERNEL) || defined(_KMEMUSER) +typedef struct { + uint8_t _ipl; +} ipl_cookie_t; +#endif #ifdef _KERNEL typedef int ipl_t; @@ -89,10 +94,6 @@ splx(ipl_t new_ipl) return old_ipl; } -typedef struct { - uint8_t _ipl; -} ipl_cookie_t; - static inline __always_inline ipl_cookie_t makeiplcookie(ipl_t ipl) { Index: src/sys/arch/vax/include/mutex.h diff -u src/sys/arch/vax/include/mutex.h:1.17 src/sys/arch/vax/include/mutex.h:1.17.4.1 --- src/sys/arch/vax/include/mutex.h:1.17 Wed Apr 6 22:47:57 2022 +++ src/sys/arch/vax/include/mutex.h Wed Aug 9 17:42:02 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.17 2022/04/06 22:47:57 riastradh Exp $ */ +/* $NetBSD: mutex.h,v 1.17.4.1 2023/08/09 17:42:02 martin Exp $ */ /*- * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc. @@ -40,6 +40,8 @@ * and (if MP) using BBSSI/BBCCI to lock out the other processors. */ +#include <sys/types.h> + #ifndef __MUTEX_PRIVATE struct kmutex { @@ -48,6 +50,8 @@ struct kmutex { #else /* __MUTEX_PRIVATE */ +#include <machine/intr.h> + struct kmutex { union { /* Adaptive mutex */ Index: src/sys/arch/x68k/include/intr.h diff -u src/sys/arch/x68k/include/intr.h:1.21 src/sys/arch/x68k/include/intr.h:1.21.60.1 --- src/sys/arch/x68k/include/intr.h:1.21 Sat Mar 22 21:49:18 2014 +++ src/sys/arch/x68k/include/intr.h Wed Aug 9 17:42:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.21 2014/03/22 21:49:18 tsutsui Exp $ */ +/* $NetBSD: intr.h,v 1.21.60.1 2023/08/09 17:42:04 martin Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -64,6 +64,8 @@ typedef struct { uint16_t _psl; } ipl_cookie_t; +#ifdef _KERNEL + static inline ipl_cookie_t makeiplcookie(ipl_t ipl) { @@ -84,4 +86,7 @@ splx(int sr) __asm volatile("movew %0,%%sr" : : "di" (sr)); } + +#endif /* _KERNEL */ + #endif /* !_X68K_INTR_H_ */ Index: src/sys/arch/x86/include/cpu.h diff -u src/sys/arch/x86/include/cpu.h:1.133 src/sys/arch/x86/include/cpu.h:1.133.4.1 --- src/sys/arch/x86/include/cpu.h:1.133 Wed Sep 7 00:40:18 2022 +++ src/sys/arch/x86/include/cpu.h Wed Aug 9 17:42:01 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.h,v 1.133 2022/09/07 00:40:18 knakahara Exp $ */ +/* $NetBSD: cpu.h,v 1.133.4.1 2023/08/09 17:42:01 martin Exp $ */ /* * Copyright (c) 1990 The Regents of the University of California. @@ -65,6 +65,10 @@ #include <sys/evcnt.h> #include <sys/device_if.h> /* for device_t */ +#ifdef SVS +#include <sys/mutex.h> +#endif + #ifdef XEN #include <xen/include/public/xen.h> #include <xen/include/public/event_channel.h> Index: src/sys/arch/x86/include/mutex.h diff -u src/sys/arch/x86/include/mutex.h:1.9 src/sys/arch/x86/include/mutex.h:1.9.22.1 --- src/sys/arch/x86/include/mutex.h:1.9 Thu Mar 5 17:58:08 2020 +++ src/sys/arch/x86/include/mutex.h Wed Aug 9 17:42:01 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: mutex.h,v 1.9 2020/03/05 17:58:08 riastradh Exp $ */ +/* $NetBSD: mutex.h,v 1.9.22.1 2023/08/09 17:42:01 martin Exp $ */ /*- * Copyright (c) 2002, 2006, 2009 The NetBSD Foundation, Inc. @@ -32,6 +32,12 @@ #ifndef _X86_MUTEX_H_ #define _X86_MUTEX_H_ +#include <sys/types.h> + +#ifdef _KERNEL +#include <machine/intr.h> +#endif + struct kmutex { union { volatile uintptr_t mtxa_owner; Index: src/sys/ddb/db_command.c diff -u src/sys/ddb/db_command.c:1.181.4.1 src/sys/ddb/db_command.c:1.181.4.2 --- src/sys/ddb/db_command.c:1.181.4.1 Sat Jun 3 14:47:52 2023 +++ src/sys/ddb/db_command.c Wed Aug 9 17:42:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: db_command.c,v 1.181.4.1 2023/06/03 14:47:52 martin Exp $ */ +/* $NetBSD: db_command.c,v 1.181.4.2 2023/08/09 17:42:03 martin Exp $ */ /* * Copyright (c) 1996, 1997, 1998, 1999, 2002, 2009, 2019 @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_command.c,v 1.181.4.1 2023/06/03 14:47:52 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_command.c,v 1.181.4.2 2023/08/09 17:42:03 martin Exp $"); #ifdef _KERNEL_OPT #include "opt_aio.h" @@ -94,6 +94,7 @@ __KERNEL_RCSID(0, "$NetBSD: db_command.c #include <sys/kernhist.h> #include <sys/socketvar.h> #include <sys/queue.h> +#include <sys/syncobj.h> #include <dev/cons.h> @@ -200,6 +201,7 @@ static void db_fncall(db_expr_t, bool, d static void db_help_print_cmd(db_expr_t, bool, db_expr_t, const char *); static void db_lock_print_cmd(db_expr_t, bool, db_expr_t, const char *); static void db_show_all_locks(db_expr_t, bool, db_expr_t, const char *); +static void db_show_all_tstiles(db_expr_t, bool, db_expr_t, const char *); static void db_show_lockstats(db_expr_t, bool, db_expr_t, const char *); static void db_show_all_freelists(db_expr_t, bool, db_expr_t, const char *); static void db_mount_print_cmd(db_expr_t, bool, db_expr_t, const char *); @@ -316,6 +318,8 @@ static const struct db_command db_show_c "Print the state of the scheduler's run queues.", NULL,NULL) }, { DDB_ADD_CMD("socket", db_socket_print_cmd, 0,NULL,NULL,NULL) }, + { DDB_ADD_CMD("tstiles", db_show_all_tstiles, + 0, "Show who's holding up tstiles", "[/t]", NULL) }, { DDB_ADD_CMD("uvmexp", db_uvmexp_print_cmd, 0, "Print a selection of UVM counters and statistics.", NULL,NULL) }, @@ -1363,6 +1367,88 @@ db_show_all_locks(db_expr_t addr, bool h } static void +db_show_all_tstiles(db_expr_t addr, bool have_addr, + db_expr_t count, const char *modif) +{ + struct proc *p; + bool trace = false; + + if (modif[0] == 't') + trace = true; + + db_printf("%5s %5s %16s %16s %16s\n", + "PID", "LID", "COMMAND", "WAITING-FOR", "WAIT-CHANNEL"); + for (p = db_proc_first(); p != NULL; p = db_proc_next(p)) { + pid_t pid = -1; + char comm[MAXCOMLEN + 1] = ""; + struct lwp *l = NULL; + + db_read_bytes((db_addr_t)&p->p_pid, sizeof(pid), (char *)&pid); + db_read_bytes((db_addr_t)p->p_comm, sizeof(comm), comm); + db_read_bytes((db_addr_t)&p->p_lwps.lh_first, sizeof(l), + (char *)&l); + while (l != NULL) { + wchan_t wchan = NULL; + char wchanname[128] = ""; + const char *wmesg = NULL; + char wmesgbuf[sizeof("tstile")] = ""; + lwpid_t lid = -1; + struct syncobj *sobj = NULL; + struct lwp *owner = NULL; + + db_read_bytes((db_addr_t)&l->l_wchan, sizeof(wchan), + (char *)&wchan); + if (wchan == NULL) + goto next; + db_symstr(wchanname, sizeof(wchanname), + (db_expr_t)(uintptr_t)wchan, DB_STGY_ANY); + db_read_bytes((db_addr_t)&l->l_wmesg, sizeof(wmesg), + (char *)&wmesg); + if (wmesg != NULL) { + db_read_bytes((db_addr_t)wmesg, + sizeof(wmesgbuf), wmesgbuf); + } + + if (strncmp(wmesgbuf, "tstile", sizeof("tstile")) != 0) + goto next; + + db_read_bytes((db_addr_t)&l->l_lid, sizeof(lid), + (char *)&lid); + db_read_bytes((db_addr_t)&l->l_syncobj, sizeof(sobj), + (char *)&sobj); + if (sobj == NULL) { + db_printf("%5ld %5ld %16s %16s %16s\n", + (long)pid, + (long)lid, + comm, + "(unknown)", + wchanname); + goto next; + } + + owner = db_syncobj_owner(sobj, wchan); + + db_printf("%5ld %5ld %16s %16lx %16s\n", + (long)pid, + (long)lid, + comm, + (long)owner, + wchanname); + + if (trace && owner != NULL) { + db_stack_trace_print( + (db_expr_t)(uintptr_t)owner, + /*have_addr*/true, /*count*/-1, + /*modif(lwp)*/"a", db_printf); + } + +next: db_read_bytes((db_addr_t)&l->l_sibling.le_next, + sizeof(l), (char *)&l); + } + } +} + +static void db_show_all_freelists(db_expr_t addr, bool have_addr, db_expr_t count, const char *modif) { Index: src/sys/ddb/ddb.h diff -u src/sys/ddb/ddb.h:1.5 src/sys/ddb/ddb.h:1.5.20.1 --- src/sys/ddb/ddb.h:1.5 Sun May 31 09:51:55 2020 +++ src/sys/ddb/ddb.h Wed Aug 9 17:42:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: ddb.h,v 1.5 2020/05/31 09:51:55 rin Exp $ */ +/* $NetBSD: ddb.h,v 1.5.20.1 2023/08/09 17:42:03 martin Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -50,5 +50,6 @@ #include <ddb/db_proc.h> #include <ddb/db_cpu.h> #include <ddb/db_autoconf.h> +#include <ddb/db_syncobj.h> #endif /* _DDB_DDB_H_ */ Index: src/sys/ddb/files.ddb diff -u src/sys/ddb/files.ddb:1.15 src/sys/ddb/files.ddb:1.15.4.1 --- src/sys/ddb/files.ddb:1.15 Wed Oct 6 12:14:51 2021 +++ src/sys/ddb/files.ddb Wed Aug 9 17:42:03 2023 @@ -1,4 +1,4 @@ -# $NetBSD: files.ddb,v 1.15 2021/10/06 12:14:51 uwe Exp $ +# $NetBSD: files.ddb,v 1.15.4.1 2023/08/09 17:42:03 martin Exp $ # # DDB options @@ -36,6 +36,7 @@ file ddb/db_proc.c ddb file ddb/db_print.c ddb file ddb/db_run.c ddb | kgdb # XXX kgdb reference file ddb/db_sym.c ddb +file ddb/db_syncobj.c ddb file ddb/db_trap.c ddb file ddb/db_variables.c ddb file ddb/db_watch.c ddb Index: src/sys/external/bsd/drm2/include/linux/idr.h diff -u src/sys/external/bsd/drm2/include/linux/idr.h:1.10 src/sys/external/bsd/drm2/include/linux/idr.h:1.10.2.1 --- src/sys/external/bsd/drm2/include/linux/idr.h:1.10 Tue Oct 25 23:36:32 2022 +++ src/sys/external/bsd/drm2/include/linux/idr.h Wed Aug 9 17:42:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: idr.h,v 1.10 2022/10/25 23:36:32 riastradh Exp $ */ +/* $NetBSD: idr.h,v 1.10.2.1 2023/08/09 17:42:03 martin Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -33,6 +33,7 @@ #define _LINUX_IDR_H_ #include <sys/types.h> +#include <sys/mutex.h> #include <sys/rbtree.h> #include <linux/gfp.h> Index: src/sys/kern/kern_core.c diff -u src/sys/kern/kern_core.c:1.37 src/sys/kern/kern_core.c:1.37.4.1 --- src/sys/kern/kern_core.c:1.37 Sat Sep 10 07:30:41 2022 +++ src/sys/kern/kern_core.c Wed Aug 9 17:42:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_core.c,v 1.37 2022/09/10 07:30:41 mrg Exp $ */ +/* $NetBSD: kern_core.c,v 1.37.4.1 2023/08/09 17:42:05 martin Exp $ */ /* * Copyright (c) 1982, 1986, 1989, 1991, 1993 @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_core.c,v 1.37 2022/09/10 07:30:41 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_core.c,v 1.37.4.1 2023/08/09 17:42:05 martin Exp $"); #ifdef _KERNEL_OPT #include "opt_execfmt.h" @@ -57,6 +57,7 @@ __KERNEL_RCSID(0, "$NetBSD: kern_core.c, #include <sys/module.h> #include <sys/compat_stub.h> #include <sys/exec_elf.h> +#include <sys/resourcevar.h> MODULE(MODULE_CLASS_MISC, coredump, NULL); Index: src/sys/opencrypto/cryptodev.h diff -u src/sys/opencrypto/cryptodev.h:1.50 src/sys/opencrypto/cryptodev.h:1.50.4.1 --- src/sys/opencrypto/cryptodev.h:1.50 Sun May 22 11:40:29 2022 +++ src/sys/opencrypto/cryptodev.h Wed Aug 9 17:42:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: cryptodev.h,v 1.50 2022/05/22 11:40:29 riastradh Exp $ */ +/* $NetBSD: cryptodev.h,v 1.50.4.1 2023/08/09 17:42:03 martin Exp $ */ /* $FreeBSD: src/sys/opencrypto/cryptodev.h,v 1.2.2.6 2003/07/02 17:04:50 sam Exp $ */ /* $OpenBSD: cryptodev.h,v 1.33 2002/07/17 23:52:39 art Exp $ */ @@ -85,8 +85,9 @@ #ifndef _CRYPTO_CRYPTO_H_ #define _CRYPTO_CRYPTO_H_ +#include <sys/types.h> + #include <sys/ioccom.h> -#include <sys/condvar.h> #include <sys/time.h> #if defined(_KERNEL_OPT) @@ -409,6 +410,16 @@ struct cryptostats { }; #ifdef _KERNEL + +#include <sys/condvar.h> +#include <sys/malloc.h> +#include <sys/mutex.h> +#include <sys/queue.h> +#include <sys/systm.h> + +struct cpu_info; +struct uio; + /* Standard initialization structure beginning */ struct cryptoini { int cri_alg; /* Algorithm to use */ Index: src/sys/sys/cpu_data.h diff -u src/sys/sys/cpu_data.h:1.52 src/sys/sys/cpu_data.h:1.52.20.1 --- src/sys/sys/cpu_data.h:1.52 Sun Jun 14 21:41:42 2020 +++ src/sys/sys/cpu_data.h Wed Aug 9 17:42:01 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu_data.h,v 1.52 2020/06/14 21:41:42 ad Exp $ */ +/* $NetBSD: cpu_data.h,v 1.52.20.1 2023/08/09 17:42:01 martin Exp $ */ /*- * Copyright (c) 2004, 2006, 2007, 2008, 2019, 2020 The NetBSD Foundation, Inc. @@ -44,6 +44,7 @@ struct lwp; #include <sys/queue.h> #include <sys/kcpuset.h> #include <sys/ipi.h> +#include <sys/intr.h> /* Per-CPU counters. New elements must be added in blocks of 8. */ enum cpu_count { Index: src/sys/sys/ksem.h diff -u src/sys/sys/ksem.h:1.15 src/sys/sys/ksem.h:1.15.30.1 --- src/sys/sys/ksem.h:1.15 Sun Feb 3 03:20:24 2019 +++ src/sys/sys/ksem.h Wed Aug 9 17:42:01 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: ksem.h,v 1.15 2019/02/03 03:20:24 thorpej Exp $ */ +/* $NetBSD: ksem.h,v 1.15.30.1 2023/08/09 17:42:01 martin Exp $ */ /* * Copyright (c) 2002 Alfred Perlstein <alf...@freebsd.org> @@ -31,9 +31,23 @@ #include <sys/cdefs.h> +#include <sys/types.h> + struct timespec; #ifdef _KERNEL + +#include <sys/condvar.h> +#include <sys/mutex.h> +#include <sys/queue.h> + +#ifndef _KMEMUSER /* XXX hack for fstat(8) */ +#include <sys/systm.h> +#endif + +struct lwp; +struct proc; + #define KSEM_MAX 128 typedef struct ksem { Index: src/sys/sys/lua.h diff -u src/sys/sys/lua.h:1.8 src/sys/sys/lua.h:1.8.48.1 --- src/sys/sys/lua.h:1.8 Sun Sep 6 06:01:02 2015 +++ src/sys/sys/lua.h Wed Aug 9 17:42:01 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lua.h,v 1.8 2015/09/06 06:01:02 dholland Exp $ */ +/* $NetBSD: lua.h,v 1.8.48.1 2023/08/09 17:42:01 martin Exp $ */ /* * Copyright (c) 2014 by Lourival Vieira Neto <ln...@netbsd.org>. @@ -39,6 +39,7 @@ #ifdef _KERNEL #include <sys/condvar.h> +#include <sys/mutex.h> #endif #define MAX_LUA_NAME 16 Index: src/sys/sys/proc.h diff -u src/sys/sys/proc.h:1.370.4.1 src/sys/sys/proc.h:1.370.4.2 --- src/sys/sys/proc.h:1.370.4.1 Sun May 28 09:43:26 2023 +++ src/sys/sys/proc.h Wed Aug 9 17:42:01 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: proc.h,v 1.370.4.1 2023/05/28 09:43:26 martin Exp $ */ +/* $NetBSD: proc.h,v 1.370.4.2 2023/08/09 17:42:01 martin Exp $ */ /*- * Copyright (c) 2006, 2007, 2008, 2020 The NetBSD Foundation, Inc. @@ -93,7 +93,9 @@ #include <sys/event.h> #include <sys/specificdata.h> -#ifndef _KERNEL +#ifdef _KERNEL +#include <sys/resourcevar.h> +#else #include <sys/time.h> #include <sys/resource.h> #endif Index: src/sys/sys/rwlock.h diff -u src/sys/sys/rwlock.h:1.17 src/sys/sys/rwlock.h:1.17.2.1 --- src/sys/sys/rwlock.h:1.17 Wed Oct 26 23:22:22 2022 +++ src/sys/sys/rwlock.h Wed Aug 9 17:42:01 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: rwlock.h,v 1.17 2022/10/26 23:22:22 riastradh Exp $ */ +/* $NetBSD: rwlock.h,v 1.17.2.1 2023/08/09 17:42:01 martin Exp $ */ /*- * Copyright (c) 2002, 2006, 2007, 2008, 2019, 2020 The NetBSD Foundation, Inc. @@ -58,6 +58,7 @@ typedef enum krw_t { typedef struct krwlock krwlock_t; #ifdef __RWLOCK_PRIVATE +#include <sys/stdbool.h> /* * Bits in the owner field of the lock that indicate lock state. If the * WRITE_LOCKED bit is clear, then the owner field is actually a count of Index: src/sys/sys/sched.h diff -u src/sys/sys/sched.h:1.91 src/sys/sys/sched.h:1.91.2.1 --- src/sys/sys/sched.h:1.91 Wed Oct 26 23:24:09 2022 +++ src/sys/sys/sched.h Wed Aug 9 17:42:01 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: sched.h,v 1.91 2022/10/26 23:24:09 riastradh Exp $ */ +/* $NetBSD: sched.h,v 1.91.2.1 2023/08/09 17:42:01 martin Exp $ */ /*- * Copyright (c) 1999, 2000, 2001, 2002, 2007, 2008, 2019, 2020 @@ -142,10 +142,11 @@ __END_DECLS #if defined(_KERNEL) || defined(_KMEMUSER) -#include <sys/mutex.h> #include <sys/time.h> #include <sys/queue.h> +struct kmutex; + /* * Per-CPU scheduler state. Field markings and the corresponding locks: * @@ -155,8 +156,8 @@ __END_DECLS * c: cpu_lock */ struct schedstate_percpu { - kmutex_t *spc_mutex; /* (: lock on below, runnable LWPs */ - kmutex_t *spc_lwplock; /* (: general purpose lock for LWPs */ + struct kmutex *spc_mutex; /* (: lock on below, runnable LWPs */ + struct kmutex *spc_lwplock; /* (: general purpose lock for LWPs */ struct lwp *spc_migrating; /* (: migrating LWP */ struct cpu_info *spc_nextpkg; /* (: next package 1st for RR */ psetid_t spc_psid; /* c: processor-set ID */ Index: src/sys/uvm/uvm_param.h diff -u src/sys/uvm/uvm_param.h:1.41 src/sys/uvm/uvm_param.h:1.41.20.1 --- src/sys/uvm/uvm_param.h:1.41 Thu Jul 23 19:07:01 2020 +++ src/sys/uvm/uvm_param.h Wed Aug 9 17:42:01 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_param.h,v 1.41 2020/07/23 19:07:01 skrll Exp $ */ +/* $NetBSD: uvm_param.h,v 1.41.20.1 2023/08/09 17:42:01 martin Exp $ */ /* * Copyright (c) 1991, 1993 @@ -74,7 +74,6 @@ #ifdef _KERNEL #include <sys/types.h> #include <machine/vmparam.h> -#include <sys/resourcevar.h> #endif #if defined(_KERNEL) Index: src/usr.sbin/crash/Makefile diff -u src/usr.sbin/crash/Makefile:1.46.6.1 src/usr.sbin/crash/Makefile:1.46.6.2 --- src/usr.sbin/crash/Makefile:1.46.6.1 Tue Aug 1 14:36:59 2023 +++ src/usr.sbin/crash/Makefile Wed Aug 9 17:42:05 2023 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.46.6.1 2023/08/01 14:36:59 martin Exp $ +# $NetBSD: Makefile,v 1.46.6.2 2023/08/09 17:42:05 martin Exp $ PROG= crash MAN= crash.8 @@ -46,13 +46,18 @@ CPPFLAGS+= -I${.CURDIR} -I${.OBJDIR} -I$ CPPFLAGS+= -DDDB_VERBOSE_HELP -DDB_MAX_LINE=10000000 -D_KMEMUSER CPPFLAGS+= -UDB_MACHINE_COMMANDS +# XXX +.if ${MACHINE} == "evbppc" +CPPFLAGS+= -DPPC_INTR_IMPL="<powerpc/intr.h>" +.endif + # ddb files from kernel .PATH: $S/ddb SRCS+= db_command.c db_lwp.c db_proc.c db_xxx.c db_cpu.c SRCS+= db_autoconf.c SRCS+= db_access.c db_elf.c db_examine.c SRCS+= db_expr.c db_lex.c db_output.c db_print.c -SRCS+= db_sym.c db_variables.c db_write_cmd.c +SRCS+= db_sym.c db_syncobj.c db_variables.c db_write_cmd.c .PATH: ${S}/arch/${MACHINE}/${MACHINE} .PATH: ${S}/arch/${MACHINE_ARCH}/${MACHINE_ARCH} Added files: Index: src/sys/ddb/db_syncobj.c diff -u /dev/null src/sys/ddb/db_syncobj.c:1.2.2.2 --- /dev/null Wed Aug 9 17:42:06 2023 +++ src/sys/ddb/db_syncobj.c Wed Aug 9 17:42:03 2023 @@ -0,0 +1,73 @@ +/* $NetBSD: db_syncobj.c,v 1.2.2.2 2023/08/09 17:42:03 martin Exp $ */ + +/*- + * Copyright (c) 2023 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#define __MUTEX_PRIVATE +#define __RWLOCK_PRIVATE + +#include <sys/cdefs.h> +__KERNEL_RCSID(0, "$NetBSD: db_syncobj.c,v 1.2.2.2 2023/08/09 17:42:03 martin Exp $"); + +#include <sys/types.h> + +#include <sys/mutex.h> +#include <sys/null.h> +#include <sys/rwlock.h> +#include <sys/syncobj.h> + +#include <ddb/ddb.h> + +struct lwp * +db_syncobj_owner(struct syncobj *sobj, wchan_t wchan) +{ + db_expr_t mutex_syncobj_; + db_expr_t rw_syncobj_; + + if (db_value_of_name("mutex_syncobj", &mutex_syncobj_) && + (db_expr_t)(uintptr_t)sobj == mutex_syncobj_) { + volatile const struct kmutex *mtx = wchan; + uintptr_t owner; + + db_read_bytes((db_addr_t)&mtx->mtx_owner, sizeof(owner), + (char *)&owner); + return (struct lwp *)(owner & MUTEX_THREAD); + + } else if (db_value_of_name("rw_syncobj", &rw_syncobj_) && + (db_expr_t)(uintptr_t)sobj == rw_syncobj_) { + volatile const struct krwlock *rw = wchan; + uintptr_t owner; + + db_read_bytes((db_addr_t)&rw->rw_owner, sizeof(owner), + (char *)&owner); + if (owner & RW_WRITE_LOCKED) + return (struct lwp *)(owner & RW_THREAD); + return NULL; + + } else { + return NULL; + } +} Index: src/sys/ddb/db_syncobj.h diff -u /dev/null src/sys/ddb/db_syncobj.h:1.1.2.2 --- /dev/null Wed Aug 9 17:42:06 2023 +++ src/sys/ddb/db_syncobj.h Wed Aug 9 17:42:03 2023 @@ -0,0 +1,39 @@ +/* $NetBSD: db_syncobj.h,v 1.1.2.2 2023/08/09 17:42:03 martin Exp $ */ + +/*- + * Copyright (c) 2023 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DDB_DB_SYNCOBJ_H +#define _DDB_DB_SYNCOBJ_H + +#include <sys/syncobj.h> + +struct lwp; +struct syncobj; + +struct lwp *db_syncobj_owner(struct syncobj *, wchan_t); + +#endif /* _DDB_DB_SYNCOBJ_H */