version 1.15.6.5, 2007/11/21 21:56:00 |
version 1.15.6.6, 2007/12/03 16:14:51 |
Line 59 __KERNEL_RCSID(0, "$NetBSD$"); |
|
Line 59 __KERNEL_RCSID(0, "$NetBSD$"); |
|
#include <sys/systm.h> |
#include <sys/systm.h> |
#include <sys/lockdebug.h> |
#include <sys/lockdebug.h> |
#include <sys/kernel.h> |
#include <sys/kernel.h> |
|
#include <sys/atomic.h> |
|
#include <sys/intr.h> |
|
|
#include <dev/lockstat.h> |
#include <dev/lockstat.h> |
|
|
#include <sys/intr.h> |
|
|
|
/* |
/* |
* When not running a debug kernel, spin mutexes are not much |
* When not running a debug kernel, spin mutexes are not much |
* more than an splraiseipl() and splx() pair. |
* more than an splraiseipl() and splx() pair. |
Line 676 mutex_vector_enter(kmutex_t *mtx) |
|
Line 676 mutex_vector_enter(kmutex_t *mtx) |
|
* If the waiters bit is not set it's unsafe to go asleep, |
* If the waiters bit is not set it's unsafe to go asleep, |
* as we might never be awoken. |
* as we might never be awoken. |
*/ |
*/ |
if ((mb_read(), mutex_onproc(owner, &ci)) || |
if ((membar_consumer(), mutex_onproc(owner, &ci)) || |
(mb_read(), !MUTEX_HAS_WAITERS(mtx))) { |
(membar_consumer(), !MUTEX_HAS_WAITERS(mtx))) { |
turnstile_exit(mtx); |
turnstile_exit(mtx); |
continue; |
continue; |
} |
} |