Page MenuHomeFreeBSD

D3205.id7338.diff
No OneTemporary

D3205.id7338.diff

Index: sys/kern/kern_lock.c
===================================================================
--- sys/kern/kern_lock.c
+++ 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: sys/kern/kern_mutex.c
===================================================================
--- sys/kern/kern_mutex.c
+++ 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: sys/kern/kern_rmlock.c
===================================================================
--- sys/kern/kern_rmlock.c
+++ sys/kern/kern_rmlock.c
@@ -611,8 +611,7 @@
WITNESS_LOCK(&rm->lock_object, LOP_EXCLUSIVE, file, line);
- curthread->td_locks++;
-
+ TD_LOCKS_INC(curthread);
}
void
@@ -628,7 +627,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 +669,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 +691,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: sys/kern/kern_rwlock.c
===================================================================
--- sys/kern/kern_rwlock.c
+++ 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: sys/kern/kern_sx.c
===================================================================
--- sys/kern/kern_sx.c
+++ 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: sys/sys/proc.h
===================================================================
--- sys/sys/proc.h
+++ sys/sys/proc.h
@@ -237,7 +237,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. */
@@ -350,8 +350,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

Mime Type
text/plain
Expires
Fri, Nov 21, 10:47 PM (52 m, 59 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25820242
Default Alt Text
D3205.id7338.diff (6 KB)

Event Timeline