Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F136991714
D3205.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D3205.diff
View Options
Index: head/sys/kern/kern_lock.c
===================================================================
--- head/sys/kern/kern_lock.c
+++ head/sys/kern/kern_lock.c
@@ -69,12 +69,8 @@
#ifndef INVARIANTS
#define _lockmgr_assert(lk, what, file, line)
-#define TD_LOCKS_INC(td)
-#define TD_LOCKS_DEC(td)
-#else
-#define TD_LOCKS_INC(td) ((td)->td_locks++)
-#define TD_LOCKS_DEC(td) ((td)->td_locks--)
#endif
+
#define TD_SLOCKS_INC(td) ((td)->td_lk_slocks++)
#define TD_SLOCKS_DEC(td) ((td)->td_lk_slocks--)
Index: head/sys/kern/kern_mutex.c
===================================================================
--- head/sys/kern/kern_mutex.c
+++ head/sys/kern/kern_mutex.c
@@ -224,7 +224,7 @@
line);
WITNESS_LOCK(&m->lock_object, (opts & ~MTX_RECURSE) | LOP_EXCLUSIVE,
file, line);
- curthread->td_locks++;
+ TD_LOCKS_INC(curthread);
}
void
@@ -248,7 +248,7 @@
mtx_assert(m, MA_OWNED);
__mtx_unlock(m, curthread, opts, file, line);
- curthread->td_locks--;
+ TD_LOCKS_DEC(curthread);
}
void
@@ -347,7 +347,7 @@
if (rval) {
WITNESS_LOCK(&m->lock_object, opts | LOP_EXCLUSIVE | LOP_TRYLOCK,
file, line);
- curthread->td_locks++;
+ TD_LOCKS_INC(curthread);
if (m->mtx_recurse == 0)
LOCKSTAT_PROFILE_OBTAIN_LOCK_SUCCESS(adaptive__acquire,
m, contested, waittime, file, line);
@@ -958,7 +958,7 @@
if (LOCK_CLASS(&m->lock_object) == &lock_class_mtx_spin)
spinlock_exit();
else
- curthread->td_locks--;
+ TD_LOCKS_DEC(curthread);
lock_profile_release_lock(&m->lock_object);
/* Tell witness this isn't locked to make it happy. */
Index: head/sys/kern/kern_rmlock.c
===================================================================
--- head/sys/kern/kern_rmlock.c
+++ head/sys/kern/kern_rmlock.c
@@ -608,11 +608,8 @@
_rm_wlock(rm);
LOCK_LOG_LOCK("RMWLOCK", &rm->lock_object, 0, 0, file, line);
-
WITNESS_LOCK(&rm->lock_object, LOP_EXCLUSIVE, file, line);
-
- curthread->td_locks++;
-
+ TD_LOCKS_INC(curthread);
}
void
@@ -628,7 +625,7 @@
WITNESS_UNLOCK(&rm->lock_object, LOP_EXCLUSIVE, file, line);
LOCK_LOG_LOCK("RMWUNLOCK", &rm->lock_object, 0, 0, file, line);
_rm_wunlock(rm);
- curthread->td_locks--;
+ TD_LOCKS_DEC(curthread);
}
int
@@ -670,9 +667,7 @@
LOCK_LOG_LOCK("RMRLOCK", &rm->lock_object, 0, 0, file,
line);
WITNESS_LOCK(&rm->lock_object, 0, file, line);
-
- curthread->td_locks++;
-
+ TD_LOCKS_INC(curthread);
return (1);
} else if (trylock)
LOCK_LOG_TRY("RMRLOCK", &rm->lock_object, 0, 0, file, line);
@@ -694,7 +689,7 @@
WITNESS_UNLOCK(&rm->lock_object, 0, file, line);
LOCK_LOG_LOCK("RMRUNLOCK", &rm->lock_object, 0, 0, file, line);
_rm_runlock(rm, tracker);
- curthread->td_locks--;
+ TD_LOCKS_DEC(curthread);
}
#else
Index: head/sys/kern/kern_rwlock.c
===================================================================
--- head/sys/kern/kern_rwlock.c
+++ head/sys/kern/kern_rwlock.c
@@ -268,7 +268,7 @@
__rw_wlock(rw, curthread, file, line);
LOCK_LOG_LOCK("WLOCK", &rw->lock_object, 0, rw->rw_recurse, file, line);
WITNESS_LOCK(&rw->lock_object, LOP_EXCLUSIVE, file, line);
- curthread->td_locks++;
+ TD_LOCKS_INC(curthread);
}
int
@@ -303,7 +303,7 @@
if (!rw_recursed(rw))
LOCKSTAT_PROFILE_OBTAIN_RWLOCK_SUCCESS(rw__acquire,
rw, 0, 0, file, line, LOCKSTAT_WRITER);
- curthread->td_locks++;
+ TD_LOCKS_INC(curthread);
}
return (rval);
}
@@ -325,8 +325,9 @@
LOCK_LOG_LOCK("WUNLOCK", &rw->lock_object, 0, rw->rw_recurse, file,
line);
__rw_wunlock(rw, curthread, file, line);
- curthread->td_locks--;
+ TD_LOCKS_DEC(curthread);
}
+
/*
* Determines whether a new reader can acquire a lock. Succeeds if the
* reader already owns a read lock and the lock is locked for read to
@@ -565,7 +566,7 @@
waittime, file, line, LOCKSTAT_READER);
LOCK_LOG_LOCK("RLOCK", &rw->lock_object, 0, 0, file, line);
WITNESS_LOCK(&rw->lock_object, 0, file, line);
- curthread->td_locks++;
+ TD_LOCKS_INC(curthread);
curthread->td_rw_rlocks++;
}
@@ -596,7 +597,7 @@
WITNESS_LOCK(&rw->lock_object, LOP_TRYLOCK, file, line);
LOCKSTAT_PROFILE_OBTAIN_RWLOCK_SUCCESS(rw__acquire,
rw, 0, 0, file, line, LOCKSTAT_READER);
- curthread->td_locks++;
+ TD_LOCKS_INC(curthread);
curthread->td_rw_rlocks++;
return (1);
}
@@ -714,7 +715,7 @@
break;
}
LOCKSTAT_PROFILE_RELEASE_RWLOCK(rw__release, rw, LOCKSTAT_READER);
- curthread->td_locks--;
+ TD_LOCKS_DEC(curthread);
curthread->td_rw_rlocks--;
}
Index: head/sys/kern/kern_sx.c
===================================================================
--- head/sys/kern/kern_sx.c
+++ head/sys/kern/kern_sx.c
@@ -261,7 +261,7 @@
if (!error) {
LOCK_LOG_LOCK("SLOCK", &sx->lock_object, 0, 0, file, line);
WITNESS_LOCK(&sx->lock_object, 0, file, line);
- curthread->td_locks++;
+ TD_LOCKS_INC(curthread);
}
return (error);
@@ -290,7 +290,7 @@
WITNESS_LOCK(&sx->lock_object, LOP_TRYLOCK, file, line);
LOCKSTAT_PROFILE_OBTAIN_RWLOCK_SUCCESS(sx__acquire,
sx, 0, 0, file, line, LOCKSTAT_READER);
- curthread->td_locks++;
+ TD_LOCKS_INC(curthread);
return (1);
}
}
@@ -318,7 +318,7 @@
LOCK_LOG_LOCK("XLOCK", &sx->lock_object, 0, sx->sx_recurse,
file, line);
WITNESS_LOCK(&sx->lock_object, LOP_EXCLUSIVE, file, line);
- curthread->td_locks++;
+ TD_LOCKS_INC(curthread);
}
return (error);
@@ -353,7 +353,7 @@
if (!sx_recursed(sx))
LOCKSTAT_PROFILE_OBTAIN_RWLOCK_SUCCESS(sx__acquire,
sx, 0, 0, file, line, LOCKSTAT_WRITER);
- curthread->td_locks++;
+ TD_LOCKS_INC(curthread);
}
return (rval);
@@ -371,7 +371,7 @@
WITNESS_UNLOCK(&sx->lock_object, 0, file, line);
LOCK_LOG_LOCK("SUNLOCK", &sx->lock_object, 0, 0, file, line);
__sx_sunlock(sx, file, line);
- curthread->td_locks--;
+ TD_LOCKS_DEC(curthread);
}
void
@@ -387,7 +387,7 @@
LOCK_LOG_LOCK("XUNLOCK", &sx->lock_object, 0, sx->sx_recurse, file,
line);
__sx_xunlock(sx, curthread, file, line);
- curthread->td_locks--;
+ TD_LOCKS_DEC(curthread);
}
/*
Index: head/sys/sys/proc.h
===================================================================
--- head/sys/sys/proc.h
+++ head/sys/sys/proc.h
@@ -238,7 +238,7 @@
int td_oncpu; /* (t) Which cpu we are on. */
volatile u_char td_owepreempt; /* (k*) Preempt on last critical_exit */
u_char td_tsqueue; /* (t) Turnstile queue blocked on. */
- short td_locks; /* (k) Count of non-spin locks. */
+ short td_locks; /* (k) Debug: count of non-spin locks */
short td_rw_rlocks; /* (k) Count of rwlock read locks. */
short td_lk_slocks; /* (k) Count of lockmgr shared locks. */
short td_stopsched; /* (k) Scheduler stopped. */
@@ -351,8 +351,14 @@
KASSERT((__m == &blocked_lock || __m == (lock)), \
("Thread %p lock %p does not match %p", td, __m, (lock))); \
} while (0)
+
+#define TD_LOCKS_INC(td) ((td)->td_locks++)
+#define TD_LOCKS_DEC(td) ((td)->td_locks--)
#else
#define THREAD_LOCKPTR_ASSERT(td, lock)
+
+#define TD_LOCKS_INC(td)
+#define TD_LOCKS_DEC(td)
#endif
/*
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Nov 21, 10:41 PM (5 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25818922
Default Alt Text
D3205.diff (6 KB)
Attached To
Mode
D3205: Don't modify td_locks unless INVARIANTS is defined.
Attached
Detach File
Event Timeline
Log In to Comment