aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/sys/mutex.h19
1 files changed, 17 insertions, 2 deletions
diff --git a/include/sys/mutex.h b/include/sys/mutex.h
index 5e2b2508a..6355782c0 100644
--- a/include/sys/mutex.h
+++ b/include/sys/mutex.h
@@ -67,7 +67,7 @@ typedef struct {
(type == MUTEX_ADAPTIVE) || \
(type == MUTEX_FSTRANS)); \
\
- __mutex_init(MUTEX(mp), #mp, &__key); \
+ __mutex_init(MUTEX(mp), (name) ? (#name) : (#mp), &__key); \
spin_lock_init(&(mp)->m_lock); \
(mp)->m_type = type; \
(mp)->m_owner = NULL; \
@@ -95,7 +95,19 @@ typedef struct {
_rc_; \
})
-#define mutex_enter(mp) \
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
+#define mutex_enter_nested(mp, subclass) \
+{ \
+ ASSERT3P(mutex_owner(mp), !=, current); \
+ mutex_lock_nested(MUTEX(mp), (subclass)); \
+ (mp)->m_owner = current; \
+ if ((mp)->m_type == MUTEX_FSTRANS) { \
+ (mp)->m_saved_flags = current->flags; \
+ current->flags |= PF_FSTRANS; \
+ } \
+}
+#else /* CONFIG_DEBUG_LOCK_ALLOC */
+#define mutex_enter_nested(mp, subclass) \
{ \
ASSERT3P(mutex_owner(mp), !=, current); \
mutex_lock(MUTEX(mp)); \
@@ -105,6 +117,9 @@ typedef struct {
current->flags |= PF_FSTRANS; \
} \
}
+#endif /* CONFIG_DEBUG_LOCK_ALLOC */
+
+#define mutex_enter(mp) mutex_enter_nested((mp), 0)
/*
* The reason for the spinlock: