diff options
| author | Pawel Jakub Dawidek <pjd@FreeBSD.org> | 2006-11-16 01:02:00 +0000 |
|---|---|---|
| committer | Pawel Jakub Dawidek <pjd@FreeBSD.org> | 2006-11-16 01:02:00 +0000 |
| commit | 7ee07175afcf33fd06dc817dd28ec220b40a3a16 (patch) | |
| tree | fefa626382a1e038e96529f97a2dd9ce533319d8 | |
| parent | f358fbffa9e7ad8d2cefd2370265b6bfe3d8bb6d (diff) | |
Notes
| -rw-r--r-- | share/man/man9/sleepqueue.9 | 6 | ||||
| -rw-r--r-- | sys/kern/kern_condvar.c | 8 | ||||
| -rw-r--r-- | sys/kern/kern_synch.c | 5 | ||||
| -rw-r--r-- | sys/kern/subr_sleepqueue.c | 6 | ||||
| -rw-r--r-- | sys/sys/sleepqueue.h | 4 |
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 *); |
