From d2a89f7f6e976d022527c2a5a1c75268aab8cd49 Mon Sep 17 00:00:00 2001 From: Richard Braun Date: Fri, 17 Mar 2017 21:49:22 +0100 Subject: kern/sleepq: also disable interrupts during critical sections --- kern/semaphore.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'kern/semaphore.c') diff --git a/kern/semaphore.c b/kern/semaphore.c index e41e2c2f..7e94dafd 100644 --- a/kern/semaphore.c +++ b/kern/semaphore.c @@ -26,9 +26,10 @@ void semaphore_wait_slow(struct semaphore *semaphore) { struct sleepq *sleepq; + unsigned long flags; unsigned int prev; - sleepq = sleepq_lend(semaphore, false); + sleepq = sleepq_lend(semaphore, false, &flags); for (;;) { prev = semaphore_dec(semaphore); @@ -40,15 +41,16 @@ semaphore_wait_slow(struct semaphore *semaphore) sleepq_wait(sleepq, "sem"); } - sleepq_return(sleepq); + sleepq_return(sleepq, flags); } void semaphore_post_slow(struct semaphore *semaphore) { struct sleepq *sleepq; + unsigned long flags; - sleepq = sleepq_acquire(semaphore, false); + sleepq = sleepq_acquire(semaphore, false, &flags); if (sleepq == NULL) { return; @@ -56,5 +58,5 @@ semaphore_post_slow(struct semaphore *semaphore) sleepq_signal(sleepq); - sleepq_release(sleepq); + sleepq_release(sleepq, flags); } -- cgit v1.2.3