From 85b318e230dc35a1a4a2cd083d420c0f0c88617e Mon Sep 17 00:00:00 2001 From: mpi Date: Wed, 14 Feb 2018 08:55:12 +0000 Subject: [PATCH] Put WITNESS only functions with the rest of the locking primitives. --- sys/kern/kern_lock.c | 52 +++++++++++++++++++++++++++++++- sys/kern/kern_mutex.c | 69 ------------------------------------------- 2 files changed, 51 insertions(+), 70 deletions(-) delete mode 100644 sys/kern/kern_mutex.c diff --git a/sys/kern/kern_lock.c b/sys/kern/kern_lock.c index 03a7bfd0651..64c5a1f6319 100644 --- a/sys/kern/kern_lock.c +++ b/sys/kern/kern_lock.c @@ -1,6 +1,7 @@ -/* $OpenBSD: kern_lock.c,v 1.56 2018/02/10 12:59:24 mpi Exp $ */ +/* $OpenBSD: kern_lock.c,v 1.57 2018/02/14 08:55:12 mpi Exp $ */ /* + * Copyright (c) 2017 Visa Hankala * Copyright (c) 2014 David Gwynne * Copyright (c) 2004 Artur Grabowski * @@ -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 */ diff --git a/sys/kern/kern_mutex.c b/sys/kern/kern_mutex.c deleted file mode 100644 index 6ede70b2d80..00000000000 --- a/sys/kern/kern_mutex.c +++ /dev/null @@ -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 -#include -#include -#include - -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); -} -- 2.20.1