diff options
author | sson <sson@FreeBSD.org> | 2009-05-26 20:28:22 +0000 |
---|---|---|
committer | sson <sson@FreeBSD.org> | 2009-05-26 20:28:22 +0000 |
commit | c0d5996eb6885340017fa87726a787b38dfa689f (patch) | |
tree | b7873baadff878509f8c7b930ddeeaa84074e546 /sys/kern/kern_lock.c | |
parent | 8dd898d24297058d22cfd3efb4da99431e21f707 (diff) | |
download | FreeBSD-src-c0d5996eb6885340017fa87726a787b38dfa689f.zip FreeBSD-src-c0d5996eb6885340017fa87726a787b38dfa689f.tar.gz |
Add the OpenSolaris dtrace lockstat provider. The lockstat provider
adds probes for mutexes, reader/writer and shared/exclusive locks to
gather contention statistics and other locking information for
dtrace scripts, the lockstat(1M) command and other potential
consumers.
Reviewed by: attilio jhb jb
Approved by: gnn (mentor)
Diffstat (limited to 'sys/kern/kern_lock.c')
-rw-r--r-- | sys/kern/kern_lock.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/sys/kern/kern_lock.c b/sys/kern/kern_lock.c index f4e5ea9..f03ddbc 100644 --- a/sys/kern/kern_lock.c +++ b/sys/kern/kern_lock.c @@ -27,6 +27,7 @@ */ #include "opt_ddb.h" +#include "opt_kdtrace.h" #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); @@ -126,6 +127,9 @@ static void assert_lockmgr(struct lock_object *lock, int how); static void db_show_lockmgr(struct lock_object *lock); #endif static void lock_lockmgr(struct lock_object *lock, int how); +#ifdef KDTRACE_HOOKS +static int owner_lockmgr(struct lock_object *lock, struct thread **owner); +#endif static int unlock_lockmgr(struct lock_object *lock); struct lock_class lock_class_lockmgr = { @@ -136,7 +140,10 @@ struct lock_class lock_class_lockmgr = { .lc_ddb_show = db_show_lockmgr, #endif .lc_lock = lock_lockmgr, - .lc_unlock = unlock_lockmgr + .lc_unlock = unlock_lockmgr, +#ifdef KDTRACE_HOOKS + .lc_owner = owner_lockmgr, +#endif }; static __inline struct thread * @@ -293,6 +300,15 @@ unlock_lockmgr(struct lock_object *lock) panic("lockmgr locks do not support sleep interlocking"); } +#ifdef KDTRACE_HOOKS +static int +owner_lockmgr(struct lock_object *lock, struct thread **owner) +{ + + panic("lockmgr locks do not support owner inquiring"); +} +#endif + void lockinit(struct lock *lk, int pri, const char *wmesg, int timo, int flags) { |