summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/kern/kern_mutex.c21
-rw-r--r--sys/kern/subr_turnstile.c21
-rw-r--r--sys/kern/subr_witness.c21
-rw-r--r--sys/sys/mutex.h15
4 files changed, 42 insertions, 36 deletions
diff --git a/sys/kern/kern_mutex.c b/sys/kern/kern_mutex.c
index 14d4ce5..5290d90 100644
--- a/sys/kern/kern_mutex.c
+++ b/sys/kern/kern_mutex.c
@@ -85,17 +85,17 @@
* Machine independent bits of the mutex implementation
*/
/* All mutexes in system (used for debug/panic) */
-#ifdef MUTEX_DEBUG
+#ifdef WITNESS
static struct mtx_debug all_mtx_debug = { NULL, {NULL, NULL}, NULL, 0,
"All mutexes queue head" };
static struct mtx all_mtx = { MTX_UNOWNED, 0, 0, &all_mtx_debug,
TAILQ_HEAD_INITIALIZER(all_mtx.mtx_blocked),
{ NULL, NULL }, &all_mtx, &all_mtx };
-#else /* MUTEX_DEBUG */
+#else /* WITNESS */
static struct mtx all_mtx = { MTX_UNOWNED, 0, 0, "All mutexes queue head",
TAILQ_HEAD_INITIALIZER(all_mtx.mtx_blocked),
{ NULL, NULL }, &all_mtx, &all_mtx };
-#endif /* MUTEX_DEBUG */
+#endif /* WITNESS */
static int mtx_cur_cnt;
static int mtx_max_cnt;
@@ -578,7 +578,7 @@ mtx_validate(struct mtx *m, int when)
void
mtx_init(struct mtx *m, const char *t, int flag)
{
-#ifdef MUTEX_DEBUG
+#ifdef WITNESS
struct mtx_debug *debug;
#endif
@@ -586,6 +586,8 @@ mtx_init(struct mtx *m, const char *t, int flag)
#ifdef MUTEX_DEBUG
if (mtx_validate(m, MV_INIT)) /* diagnostic and error correction */
return;
+#endif
+#ifdef WITNESS
if (flag & MTX_COLD)
debug = m->mtx_debug;
else
@@ -604,7 +606,7 @@ mtx_init(struct mtx *m, const char *t, int flag)
#endif
bzero((void *)m, sizeof *m);
TAILQ_INIT(&m->mtx_blocked);
-#ifdef MUTEX_DEBUG
+#ifdef WITNESS
m->mtx_debug = debug;
#endif
m->mtx_description = t;
@@ -650,6 +652,8 @@ mtx_destroy(struct mtx *m)
m->mtx_prev->mtx_next = m->mtx_next;
#ifdef MUTEX_DEBUG
m->mtx_next = m->mtx_prev = NULL;
+#endif
+#ifdef WITNESS
free(m->mtx_debug, M_DEVBUF);
m->mtx_debug = NULL;
#endif
@@ -659,10 +663,9 @@ mtx_destroy(struct mtx *m)
/*
* The non-inlined versions of the mtx_*() functions are always built (above),
- * but the witness code depends on the MUTEX_DEBUG and WITNESS kernel options
- * being specified.
+ * but the witness code depends on the WITNESS kernel option being specified.
*/
-#if (defined(MUTEX_DEBUG) && defined(WITNESS))
+#ifdef WITNESS
#define WITNESS_COUNT 200
#define WITNESS_NCHILDREN 2
@@ -1377,4 +1380,4 @@ witness_restore(struct mtx *m, const char *file, int line)
m->mtx_witness->w_line = line;
}
-#endif /* (defined(MUTEX_DEBUG) && defined(WITNESS)) */
+#endif /* WITNESS */
diff --git a/sys/kern/subr_turnstile.c b/sys/kern/subr_turnstile.c
index 14d4ce5..5290d90 100644
--- a/sys/kern/subr_turnstile.c
+++ b/sys/kern/subr_turnstile.c
@@ -85,17 +85,17 @@
* Machine independent bits of the mutex implementation
*/
/* All mutexes in system (used for debug/panic) */
-#ifdef MUTEX_DEBUG
+#ifdef WITNESS
static struct mtx_debug all_mtx_debug = { NULL, {NULL, NULL}, NULL, 0,
"All mutexes queue head" };
static struct mtx all_mtx = { MTX_UNOWNED, 0, 0, &all_mtx_debug,
TAILQ_HEAD_INITIALIZER(all_mtx.mtx_blocked),
{ NULL, NULL }, &all_mtx, &all_mtx };
-#else /* MUTEX_DEBUG */
+#else /* WITNESS */
static struct mtx all_mtx = { MTX_UNOWNED, 0, 0, "All mutexes queue head",
TAILQ_HEAD_INITIALIZER(all_mtx.mtx_blocked),
{ NULL, NULL }, &all_mtx, &all_mtx };
-#endif /* MUTEX_DEBUG */
+#endif /* WITNESS */
static int mtx_cur_cnt;
static int mtx_max_cnt;
@@ -578,7 +578,7 @@ mtx_validate(struct mtx *m, int when)
void
mtx_init(struct mtx *m, const char *t, int flag)
{
-#ifdef MUTEX_DEBUG
+#ifdef WITNESS
struct mtx_debug *debug;
#endif
@@ -586,6 +586,8 @@ mtx_init(struct mtx *m, const char *t, int flag)
#ifdef MUTEX_DEBUG
if (mtx_validate(m, MV_INIT)) /* diagnostic and error correction */
return;
+#endif
+#ifdef WITNESS
if (flag & MTX_COLD)
debug = m->mtx_debug;
else
@@ -604,7 +606,7 @@ mtx_init(struct mtx *m, const char *t, int flag)
#endif
bzero((void *)m, sizeof *m);
TAILQ_INIT(&m->mtx_blocked);
-#ifdef MUTEX_DEBUG
+#ifdef WITNESS
m->mtx_debug = debug;
#endif
m->mtx_description = t;
@@ -650,6 +652,8 @@ mtx_destroy(struct mtx *m)
m->mtx_prev->mtx_next = m->mtx_next;
#ifdef MUTEX_DEBUG
m->mtx_next = m->mtx_prev = NULL;
+#endif
+#ifdef WITNESS
free(m->mtx_debug, M_DEVBUF);
m->mtx_debug = NULL;
#endif
@@ -659,10 +663,9 @@ mtx_destroy(struct mtx *m)
/*
* The non-inlined versions of the mtx_*() functions are always built (above),
- * but the witness code depends on the MUTEX_DEBUG and WITNESS kernel options
- * being specified.
+ * but the witness code depends on the WITNESS kernel option being specified.
*/
-#if (defined(MUTEX_DEBUG) && defined(WITNESS))
+#ifdef WITNESS
#define WITNESS_COUNT 200
#define WITNESS_NCHILDREN 2
@@ -1377,4 +1380,4 @@ witness_restore(struct mtx *m, const char *file, int line)
m->mtx_witness->w_line = line;
}
-#endif /* (defined(MUTEX_DEBUG) && defined(WITNESS)) */
+#endif /* WITNESS */
diff --git a/sys/kern/subr_witness.c b/sys/kern/subr_witness.c
index 14d4ce5..5290d90 100644
--- a/sys/kern/subr_witness.c
+++ b/sys/kern/subr_witness.c
@@ -85,17 +85,17 @@
* Machine independent bits of the mutex implementation
*/
/* All mutexes in system (used for debug/panic) */
-#ifdef MUTEX_DEBUG
+#ifdef WITNESS
static struct mtx_debug all_mtx_debug = { NULL, {NULL, NULL}, NULL, 0,
"All mutexes queue head" };
static struct mtx all_mtx = { MTX_UNOWNED, 0, 0, &all_mtx_debug,
TAILQ_HEAD_INITIALIZER(all_mtx.mtx_blocked),
{ NULL, NULL }, &all_mtx, &all_mtx };
-#else /* MUTEX_DEBUG */
+#else /* WITNESS */
static struct mtx all_mtx = { MTX_UNOWNED, 0, 0, "All mutexes queue head",
TAILQ_HEAD_INITIALIZER(all_mtx.mtx_blocked),
{ NULL, NULL }, &all_mtx, &all_mtx };
-#endif /* MUTEX_DEBUG */
+#endif /* WITNESS */
static int mtx_cur_cnt;
static int mtx_max_cnt;
@@ -578,7 +578,7 @@ mtx_validate(struct mtx *m, int when)
void
mtx_init(struct mtx *m, const char *t, int flag)
{
-#ifdef MUTEX_DEBUG
+#ifdef WITNESS
struct mtx_debug *debug;
#endif
@@ -586,6 +586,8 @@ mtx_init(struct mtx *m, const char *t, int flag)
#ifdef MUTEX_DEBUG
if (mtx_validate(m, MV_INIT)) /* diagnostic and error correction */
return;
+#endif
+#ifdef WITNESS
if (flag & MTX_COLD)
debug = m->mtx_debug;
else
@@ -604,7 +606,7 @@ mtx_init(struct mtx *m, const char *t, int flag)
#endif
bzero((void *)m, sizeof *m);
TAILQ_INIT(&m->mtx_blocked);
-#ifdef MUTEX_DEBUG
+#ifdef WITNESS
m->mtx_debug = debug;
#endif
m->mtx_description = t;
@@ -650,6 +652,8 @@ mtx_destroy(struct mtx *m)
m->mtx_prev->mtx_next = m->mtx_next;
#ifdef MUTEX_DEBUG
m->mtx_next = m->mtx_prev = NULL;
+#endif
+#ifdef WITNESS
free(m->mtx_debug, M_DEVBUF);
m->mtx_debug = NULL;
#endif
@@ -659,10 +663,9 @@ mtx_destroy(struct mtx *m)
/*
* The non-inlined versions of the mtx_*() functions are always built (above),
- * but the witness code depends on the MUTEX_DEBUG and WITNESS kernel options
- * being specified.
+ * but the witness code depends on the WITNESS kernel option being specified.
*/
-#if (defined(MUTEX_DEBUG) && defined(WITNESS))
+#ifdef WITNESS
#define WITNESS_COUNT 200
#define WITNESS_NCHILDREN 2
@@ -1377,4 +1380,4 @@ witness_restore(struct mtx *m, const char *file, int line)
m->mtx_witness->w_line = line;
}
-#endif /* (defined(MUTEX_DEBUG) && defined(WITNESS)) */
+#endif /* WITNESS */
diff --git a/sys/sys/mutex.h b/sys/sys/mutex.h
index 53bc878..3532e99 100644
--- a/sys/sys/mutex.h
+++ b/sys/sys/mutex.h
@@ -86,7 +86,7 @@
#endif /* _KERNEL */
-#ifdef MUTEX_DEBUG
+#ifdef WITNESS
struct mtx_debug {
/* If you add anything here, adjust the mtxf_t definition below */
struct witness *mtxd_witness;
@@ -101,7 +101,7 @@ struct mtx_debug {
#define mtx_line mtx_debug->mtxd_line
#define mtx_file mtx_debug->mtxd_file
#define mtx_witness mtx_debug->mtxd_witness
-#endif
+#endif /* WITNESS */
/*
* Sleep/spin mutex
@@ -110,7 +110,7 @@ struct mtx {
volatile uintptr_t mtx_lock; /* lock owner/gate/flags */
volatile u_int mtx_recurse; /* number of recursive holds */
u_int mtx_saveintr; /* saved flags (for spin locks) */
-#ifdef MUTEX_DEBUG
+#ifdef WITNESS
struct mtx_debug *mtx_debug;
#else
const char *mtx_description;
@@ -121,7 +121,7 @@ struct mtx {
struct mtx *mtx_prev;
};
-#ifdef MUTEX_DEBUG
+#ifdef WITNESS
#define MUTEX_DECLARE(modifiers, name) \
static struct mtx_debug __mtx_debug_##name; \
modifiers struct mtx name = { 0, 0, 0, &__mtx_debug_##name }
@@ -262,9 +262,6 @@ do { \
#endif /* MUTEX_DEBUG */
#ifdef WITNESS
-#ifndef MUTEX_DEBUG
-#error WITNESS requires MUTEX_DEBUG
-#endif /* MUTEX_DEBUG */
#define WITNESS_ENTER(m, t, f, l) \
if ((m)->mtx_witness != NULL) \
witness_enter((m), (t), (f), (l))
@@ -550,12 +547,12 @@ _mtx_try_enter(struct mtx *mtxp, int type, const char *file, int line)
int rval;
rval = _obtain_lock(mpp, CURTHD);
-#ifdef MUTEX_DEBUG
+#ifdef WITNESS
if (rval && mpp->mtx_witness != NULL) {
MPASS(mpp->mtx_recurse == 0);
witness_try_enter(mpp, type, file, line);
}
-#endif
+#endif /* WITNESS */
CTR5(KTR_LOCK, STR_mtx_try_enter_fmt,
mpp->mtx_description, mpp, rval, file, line);
OpenPOWER on IntegriCloud