summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPawel Jakub Dawidek <pjd@FreeBSD.org>2006-11-16 01:02:00 +0000
committerPawel Jakub Dawidek <pjd@FreeBSD.org>2006-11-16 01:02:00 +0000
commit7ee07175afcf33fd06dc817dd28ec220b40a3a16 (patch)
treefefa626382a1e038e96529f97a2dd9ce533319d8
parentf358fbffa9e7ad8d2cefd2370265b6bfe3d8bb6d (diff)
Notes
-rw-r--r--share/man/man9/sleepqueue.96
-rw-r--r--sys/kern/kern_condvar.c8
-rw-r--r--sys/kern/kern_synch.c5
-rw-r--r--sys/kern/subr_sleepqueue.c6
-rw-r--r--sys/sys/sleepqueue.h4
5 files changed, 15 insertions, 14 deletions
diff --git a/share/man/man9/sleepqueue.9 b/share/man/man9/sleepqueue.9
index 5d28b6634e94..2432d5953d31 100644
--- a/share/man/man9/sleepqueue.9
+++ b/share/man/man9/sleepqueue.9
@@ -54,7 +54,7 @@
.Ft void
.Fn sleepq_abort "struct thread *td"
.Ft void
-.Fn sleepq_add "void *wchan" "struct mtx *lock" "const char *wmesg" "int flags"
+.Fn sleepq_add "void *wchan" "struct lock_object *lock" "const char *wmesg" "int flags"
.Ft struct sleepqueue *
.Fn sleepq_alloc "void"
.Ft void
@@ -157,12 +157,12 @@ The sleep queue chain associated with argument
must be locked by a prior call to
.Fn sleepq_lock
when this function is called.
-If a mutex is specified via the
+If a lock is specified via the
.Fa lock
argument, and if the kernel was compiled with
.Cd "options INVARIANTS" ,
then the sleep queue code will perform extra checks to ensure that
-the mutex is used by all threads sleeping on
+the lock is used by all threads sleeping on
.Fa wchan .
The
.Fa wmesg
diff --git a/sys/kern/kern_condvar.c b/sys/kern/kern_condvar.c
index 73779816d517..85a52b129e4e 100644
--- a/sys/kern/kern_condvar.c
+++ b/sys/kern/kern_condvar.c
@@ -149,7 +149,7 @@ cv_wait_unlock(struct cv *cvp, struct mtx *mp)
DROP_GIANT();
mtx_unlock(mp);
- sleepq_add(cvp, mp, cvp->cv_description, SLEEPQ_CONDVAR);
+ sleepq_add(cvp, &mp->mtx_object, cvp->cv_description, SLEEPQ_CONDVAR);
sleepq_wait(cvp);
PICKUP_GIANT();
@@ -196,7 +196,7 @@ cv_wait_sig(struct cv *cvp, struct mtx *mp)
DROP_GIANT();
mtx_unlock(mp);
- sleepq_add(cvp, mp, cvp->cv_description, SLEEPQ_CONDVAR |
+ sleepq_add(cvp, &mp->mtx_object, cvp->cv_description, SLEEPQ_CONDVAR |
SLEEPQ_INTERRUPTIBLE);
rval = sleepq_wait_sig(cvp);
@@ -250,7 +250,7 @@ cv_timedwait(struct cv *cvp, struct mtx *mp, int timo)
DROP_GIANT();
mtx_unlock(mp);
- sleepq_add(cvp, mp, cvp->cv_description, SLEEPQ_CONDVAR);
+ sleepq_add(cvp, &mp->mtx_object, cvp->cv_description, SLEEPQ_CONDVAR);
sleepq_set_timeout(cvp, timo);
rval = sleepq_timedwait(cvp);
@@ -307,7 +307,7 @@ cv_timedwait_sig(struct cv *cvp, struct mtx *mp, int timo)
DROP_GIANT();
mtx_unlock(mp);
- sleepq_add(cvp, mp, cvp->cv_description, SLEEPQ_CONDVAR |
+ sleepq_add(cvp, &mp->mtx_object, cvp->cv_description, SLEEPQ_CONDVAR |
SLEEPQ_INTERRUPTIBLE);
sleepq_set_timeout(cvp, timo);
rval = sleepq_timedwait_sig(cvp);
diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c
index b8082fd80514..366290217a63 100644
--- a/sys/kern/kern_synch.c
+++ b/sys/kern/kern_synch.c
@@ -188,7 +188,8 @@ msleep(ident, mtx, priority, wmesg, timo)
* stopped, then td will no longer be on a sleep queue upon
* return from cursig().
*/
- sleepq_add(ident, ident == &lbolt ? NULL : mtx, wmesg, flags);
+ sleepq_add(ident, ident == &lbolt ? NULL : &mtx->mtx_object, wmesg,
+ flags);
if (timo)
sleepq_set_timeout(ident, timo);
@@ -265,7 +266,7 @@ msleep_spin(ident, mtx, wmesg, timo)
/*
* We put ourselves on the sleep queue and start our timeout.
*/
- sleepq_add(ident, mtx, wmesg, SLEEPQ_MSLEEP);
+ sleepq_add(ident, &mtx->mtx_object, wmesg, SLEEPQ_MSLEEP);
if (timo)
sleepq_set_timeout(ident, timo);
diff --git a/sys/kern/subr_sleepqueue.c b/sys/kern/subr_sleepqueue.c
index 081c737a3406..2d79c991854e 100644
--- a/sys/kern/subr_sleepqueue.c
+++ b/sys/kern/subr_sleepqueue.c
@@ -120,7 +120,7 @@ struct sleepqueue {
void *sq_wchan; /* (c) Wait channel. */
#ifdef INVARIANTS
int sq_type; /* (c) Queue type. */
- struct mtx *sq_lock; /* (c) Associated lock. */
+ struct lock_object *sq_lock; /* (c) Associated lock. */
#endif
};
@@ -262,7 +262,7 @@ sleepq_release(void *wchan)
* woken up.
*/
void
-sleepq_add(void *wchan, struct mtx *lock, const char *wmesg, int flags)
+sleepq_add(void *wchan, struct lock_object *lock, const char *wmesg, int flags)
{
struct sleepqueue_chain *sc;
struct sleepqueue *sq;
@@ -895,7 +895,7 @@ found:
#ifdef INVARIANTS
db_printf("Queue type: %d\n", sq->sq_type);
if (sq->sq_lock) {
- lock = &sq->sq_lock->mtx_object;
+ lock = sq->sq_lock;
db_printf("Associated Interlock: %p - (%s) %s\n", lock,
LOCK_CLASS(lock)->lc_name, lock->lo_name);
}
diff --git a/sys/sys/sleepqueue.h b/sys/sys/sleepqueue.h
index 6bdc6ca19f00..097972635c61 100644
--- a/sys/sys/sleepqueue.h
+++ b/sys/sys/sleepqueue.h
@@ -75,7 +75,7 @@
* using this interface as well (death to TDI_IWAIT!)
*/
-struct mtx;
+struct lock_object;
struct sleepqueue;
struct thread;
@@ -88,7 +88,7 @@ struct thread;
void init_sleepqueues(void);
void sleepq_abort(struct thread *td, int intrval);
-void sleepq_add(void *, struct mtx *, const char *, int);
+void sleepq_add(void *, struct lock_object *, const char *, int);
struct sleepqueue *sleepq_alloc(void);
void sleepq_broadcast(void *, int, int);
void sleepq_free(struct sleepqueue *);