From fb63feef6fd4bbcfba35fdafd7e6a45aa0d28cd2 Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Fri, 19 Oct 2001 19:28:18 +0000 Subject: [PATCH] - Move the definition of LOCK_DEBUG back to sys/lock.h from sys/_lock.h. - Change LOCK_DEBUG so that it is always on if KTR is compiled in regardless of the state of KTR_COMPILE. This means that we no longer need to include sys/ktr.h before sys/lock.h to ensure a valid setting for LOCK_DEBUG. - Change the use of LOCK_DEBUG so that it is now always defined and its value is used instead of merely its definition. That is, instead of #ifdef LOCK_DEBUG, code should now use #if LOCK_DEBUG > 0. - Use this latest to #error out in sys/mutex.h if sys/lock.h isn't included before sys/mutex.h to ensure that the proper versions of the mutex operations are used. - As a result of (2) sys/mutex.h no longer includes sys/ktr.h in the KERNEL case. Requested by: bde (1) --- sys/sys/_lock.h | 16 ---------------- sys/sys/lock.h | 17 ++++++++++++++++- sys/sys/mutex.h | 10 ++++------ 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/sys/sys/_lock.h b/sys/sys/_lock.h index 9841f45d565..cc035df54ba 100644 --- a/sys/sys/_lock.h +++ b/sys/sys/_lock.h @@ -31,22 +31,6 @@ #ifndef _SYS_LOCK_TYPES_H_ #define _SYS_LOCK_TYPES_H_ -#ifdef _KERNEL -/* - * If any of WITNESS, INVARIANTS, or KTR_LOCK KTR tracing has been enabled, - * then turn on LOCK_DEBUG. When this option is on, extra debugging - * facilities such as tracking the file and line number of lock operations - * are enabled. Also, mutex locking operations are not inlined to avoid - * bloat from all the extra debugging code. We also have to turn on all the - * calling conventions for this debugging code in modules so that modules can - * work with both debug and non-debug kernels. - */ -#if defined(KLD_MODULE) || defined(WITNESS) || defined(INVARIANTS) || defined(INVARIANT_SUPPORT) || (defined(KTR) && (KTR_COMPILE & KTR_LOCK)) -#define LOCK_DEBUG -#endif - -#endif /* _KERNEL */ - struct lock_object { struct lock_class *lo_class; const char *lo_name; diff --git a/sys/sys/lock.h b/sys/sys/lock.h index 51fcac3570e..04b49fac021 100644 --- a/sys/sys/lock.h +++ b/sys/sys/lock.h @@ -123,11 +123,26 @@ struct lock_list_entry { u_int ll_count; }; +/* + * If any of WITNESS, INVARIANTS, or KTR_LOCK KTR tracing has been enabled, + * then turn on LOCK_DEBUG. When this option is on, extra debugging + * facilities such as tracking the file and line number of lock operations + * are enabled. Also, mutex locking operations are not inlined to avoid + * bloat from all the extra debugging code. We also have to turn on all the + * calling conventions for this debugging code in modules so that modules can + * work with both debug and non-debug kernels. + */ +#if defined(KLD_MODULE) || defined(WITNESS) || defined(INVARIANTS) || defined(INVARIANT_SUPPORT) || defined(KTR) +#define LOCK_DEBUG 1 +#else +#define LOCK_DEBUG 0 +#endif + /* * In the LOCK_DEBUG case, use the filename and line numbers for debugging * operations. Otherwise, use default values to avoid the unneeded bloat. */ -#ifdef LOCK_DEBUG +#if LOCK_DEBUG > 0 #define LOCK_FILE __FILE__ #define LOCK_LINE __LINE__ #else diff --git a/sys/sys/mutex.h b/sys/sys/mutex.h index 3965d97c377..d4c5c37606f 100644 --- a/sys/sys/mutex.h +++ b/sys/sys/mutex.h @@ -34,11 +34,6 @@ #ifndef LOCORE #include - -#ifdef _KERNEL -#include -#endif /* _KERNEL_ */ - #include #include @@ -242,7 +237,10 @@ void _mtx_assert(struct mtx *m, int what, const char *file, int line); #define mtx_unlock(m) mtx_unlock_flags((m), 0) #define mtx_unlock_spin(m) mtx_unlock_spin_flags((m), 0) -#ifdef LOCK_DEBUG +#ifndef LOCK_DEBUG +#error LOCK_DEBUG not defined, include before +#endif +#if LOCK_DEBUG > 0 #define mtx_lock_flags(m, opts) \ _mtx_lock_flags((m), (opts), LOCK_FILE, LOCK_LINE) #define mtx_unlock_flags(m, opts) \