diff options
author | John Baldwin <jhb@FreeBSD.org> | 2001-06-25 18:29:32 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2001-06-25 18:29:32 +0000 |
commit | c4f7a18726d2dfbf5856b5a4014f017baf19e15a (patch) | |
tree | e6cd45594172cba6bb847805c2960bf291581107 /sys | |
parent | 84bbc4dbda8b266303f82a5e53bdb54fdc6ea011 (diff) | |
download | src-c4f7a18726d2dfbf5856b5a4014f017baf19e15a.tar.gz src-c4f7a18726d2dfbf5856b5a4014f017baf19e15a.zip |
Count the context switch when blocking on a mutex as a voluntary context
switch. Count the context switch when preempting the current thread to let
a higher priority thread blocked on a mutex we just released run as an
involuntary context switch.
Reported by: bde
Notes
Notes:
svn path=/head/; revision=78766
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/kern_mutex.c | 3 | ||||
-rw-r--r-- | sys/kern/subr_turnstile.c | 3 |
2 files changed, 6 insertions, 0 deletions
diff --git a/sys/kern/kern_mutex.c b/sys/kern/kern_mutex.c index 0007a8b9a3bd..f2740f65f8a5 100644 --- a/sys/kern/kern_mutex.c +++ b/sys/kern/kern_mutex.c @@ -64,6 +64,7 @@ #include <sys/malloc.h> #include <sys/mutex.h> #include <sys/proc.h> +#include <sys/resourcevar.h> #include <sys/sysctl.h> #include <sys/systm.h> #include <sys/vmmeter.h> @@ -399,6 +400,7 @@ _mtx_lock_sleep(struct mtx *m, int opts, const char *file, int line) "_mtx_lock_sleep: p %p blocked on [%p] %s", p, m, m->mtx_object.lo_name); + p->p_stats->p_ru.ru_nvcsw++; mi_switch(); if (LOCK_LOG_TEST(&m->mtx_object, opts)) @@ -536,6 +538,7 @@ _mtx_unlock_sleep(struct mtx *m, int opts, const char *file, int line) "_mtx_unlock_sleep: %p switching out lock=%p", m, (void *)m->mtx_lock); + p->p_stats->p_ru.ru_nivcsw++; mi_switch(); if (LOCK_LOG_TEST(&m->mtx_object, opts)) CTR2(KTR_LOCK, "_mtx_unlock_sleep: %p resuming lock=%p", diff --git a/sys/kern/subr_turnstile.c b/sys/kern/subr_turnstile.c index 0007a8b9a3bd..f2740f65f8a5 100644 --- a/sys/kern/subr_turnstile.c +++ b/sys/kern/subr_turnstile.c @@ -64,6 +64,7 @@ #include <sys/malloc.h> #include <sys/mutex.h> #include <sys/proc.h> +#include <sys/resourcevar.h> #include <sys/sysctl.h> #include <sys/systm.h> #include <sys/vmmeter.h> @@ -399,6 +400,7 @@ _mtx_lock_sleep(struct mtx *m, int opts, const char *file, int line) "_mtx_lock_sleep: p %p blocked on [%p] %s", p, m, m->mtx_object.lo_name); + p->p_stats->p_ru.ru_nvcsw++; mi_switch(); if (LOCK_LOG_TEST(&m->mtx_object, opts)) @@ -536,6 +538,7 @@ _mtx_unlock_sleep(struct mtx *m, int opts, const char *file, int line) "_mtx_unlock_sleep: %p switching out lock=%p", m, (void *)m->mtx_lock); + p->p_stats->p_ru.ru_nivcsw++; mi_switch(); if (LOCK_LOG_TEST(&m->mtx_object, opts)) CTR2(KTR_LOCK, "_mtx_unlock_sleep: %p resuming lock=%p", |