diff options
Diffstat (limited to 'kern/mutex.c')
-rw-r--r-- | kern/mutex.c | 54 |
1 files changed, 1 insertions, 53 deletions
diff --git a/kern/mutex.c b/kern/mutex.c index 87e3d64e..62609768 100644 --- a/kern/mutex.c +++ b/kern/mutex.c @@ -15,60 +15,8 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef X15_MUTEX_PI - -#include <stddef.h> - #include <kern/init.h> -#include <kern/mutex.h> -#include <kern/mutex_i.h> -#include <kern/sleepq.h> - -void -mutex_lock_slow(struct mutex *mutex) -{ - struct sleepq *sleepq; - unsigned long flags; - unsigned int state; - - sleepq = sleepq_lend(mutex, false, &flags); - - for (;;) { - state = atomic_swap_acquire(&mutex->state, MUTEX_CONTENDED); - - if (state == MUTEX_UNLOCKED) { - break; - } - - sleepq_wait(sleepq, "mutex"); - } - - if (sleepq_empty(sleepq)) { - state = atomic_swap_acquire(&mutex->state, MUTEX_LOCKED); - assert(state == MUTEX_CONTENDED); - } - - sleepq_return(sleepq, flags); -} - -void -mutex_unlock_slow(struct mutex *mutex) -{ - struct sleepq *sleepq; - unsigned long flags; - - sleepq = sleepq_acquire(mutex, false, &flags); - - if (sleepq == NULL) { - return; - } - - sleepq_signal(sleepq); - - sleepq_release(sleepq, flags); -} - -#endif /* X15_MUTEX_PI */ +#include <kern/thread.h> static int __init mutex_setup(void) |