I'd like to keep all locking code in the same file then slowly remove the abstractions.
ok? Index: kern/kern_lock.c =================================================================== RCS file: /cvs/src/sys/kern/kern_lock.c,v retrieving revision 1.56 diff -u -p -r1.56 kern_lock.c --- kern/kern_lock.c 10 Feb 2018 12:59:24 -0000 1.56 +++ kern/kern_lock.c 10 Feb 2018 13:02:15 -0000 @@ -1,6 +1,7 @@ /* $OpenBSD: kern_lock.c,v 1.56 2018/02/10 12:59:24 mpi Exp $ */ /* + * Copyright (c) 2017 Visa Hankala * Copyright (c) 2014 David Gwynne <d...@openbsd.org> * Copyright (c) 2004 Artur Grabowski <a...@openbsd.org> * @@ -350,3 +351,52 @@ __mtx_leave(struct mutex *mtx) splx(s); } #endif /* __USE_MI_MUTEX */ + +#ifdef WITNESS +void +_mtx_init_flags(struct mutex *m, int ipl, const char *name, int flags, + struct lock_type *type) +{ + struct lock_object *lo = MUTEX_LOCK_OBJECT(m); + + lo->lo_flags = MTX_LO_FLAGS(flags); + if (name != NULL) + lo->lo_name = name; + else + lo->lo_name = type->lt_name; + WITNESS_INIT(lo, type); + + _mtx_init(m, ipl); +} + +void +_mtx_enter(struct mutex *m, const char *file, int line) +{ + struct lock_object *lo = MUTEX_LOCK_OBJECT(m); + + WITNESS_CHECKORDER(lo, LOP_EXCLUSIVE | LOP_NEWORDER, file, line, NULL); + __mtx_enter(m); + WITNESS_LOCK(lo, LOP_EXCLUSIVE, file, line); +} + +int +_mtx_enter_try(struct mutex *m, const char *file, int line) +{ + struct lock_object *lo = MUTEX_LOCK_OBJECT(m); + + if (__mtx_enter_try(m)) { + WITNESS_LOCK(lo, LOP_EXCLUSIVE, file, line); + return 1; + } + return 0; +} + +void +_mtx_leave(struct mutex *m, const char *file, int line) +{ + struct lock_object *lo = MUTEX_LOCK_OBJECT(m); + + WITNESS_UNLOCK(lo, LOP_EXCLUSIVE, file, line); + __mtx_leave(m); +} +#endif /* WITNESS */ Index: kern/kern_mutex.c =================================================================== RCS file: kern/kern_mutex.c diff -N kern/kern_mutex.c --- kern/kern_mutex.c 20 Apr 2017 13:57:30 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,69 +0,0 @@ -/* $OpenBSD: kern_mutex.c,v 1.1 2017/04/20 13:57:30 visa Exp $ */ - -/* - * Copyright (c) 2017 Visa Hankala - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/mutex.h> -#include <sys/witness.h> - -void -_mtx_init_flags(struct mutex *m, int ipl, const char *name, int flags, - struct lock_type *type) -{ - struct lock_object *lo = MUTEX_LOCK_OBJECT(m); - - lo->lo_flags = MTX_LO_FLAGS(flags); - if (name != NULL) - lo->lo_name = name; - else - lo->lo_name = type->lt_name; - WITNESS_INIT(lo, type); - - _mtx_init(m, ipl); -} - -void -_mtx_enter(struct mutex *m, const char *file, int line) -{ - struct lock_object *lo = MUTEX_LOCK_OBJECT(m); - - WITNESS_CHECKORDER(lo, LOP_EXCLUSIVE | LOP_NEWORDER, file, line, NULL); - __mtx_enter(m); - WITNESS_LOCK(lo, LOP_EXCLUSIVE, file, line); -} - -int -_mtx_enter_try(struct mutex *m, const char *file, int line) -{ - struct lock_object *lo = MUTEX_LOCK_OBJECT(m); - - if (__mtx_enter_try(m)) { - WITNESS_LOCK(lo, LOP_EXCLUSIVE, file, line); - return 1; - } - return 0; -} - -void -_mtx_leave(struct mutex *m, const char *file, int line) -{ - struct lock_object *lo = MUTEX_LOCK_OBJECT(m); - - WITNESS_UNLOCK(lo, LOP_EXCLUSIVE, file, line); - __mtx_leave(m); -} Index: conf/files =================================================================== RCS file: /cvs/src/sys/conf/files,v retrieving revision 1.658 diff -u -p -r1.658 files --- conf/files 7 Feb 2018 01:09:57 -0000 1.658 +++ conf/files 10 Feb 2018 13:02:17 -0000 @@ -671,7 +671,6 @@ file kern/kern_kthread.c file kern/kern_ktrace.c ktrace file kern/kern_lock.c file kern/kern_malloc.c -file kern/kern_mutex.c witness file kern/kern_rwlock.c file kern/kern_physio.c file kern/kern_proc.c