From 9ea1595a9156f2818b216d883e25f63bd74459c0 Mon Sep 17 00:00:00 2001 From: Richard Braun Date: Tue, 10 Jul 2018 19:40:05 +0200 Subject: kern/sleepq: make disabling interrupts optional Commit d2a89f7f6e976d022527c2a5a1c75268aab8cd49 changed sleep queues to allow semaphores to be signalled from interrupt handlers, but this implied disabling interrupts for all synchronization objects, and most of them do not require interrupts to be disabled. The sleep queue interface is augmented with interrupt-related versions. --- kern/semaphore.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'kern/semaphore.c') diff --git a/kern/semaphore.c b/kern/semaphore.c index 72e843a9..a95f17fa 100644 --- a/kern/semaphore.c +++ b/kern/semaphore.c @@ -35,7 +35,7 @@ semaphore_wait_slow_common(struct semaphore *semaphore, error = 0; - sleepq = sleepq_lend(semaphore, false, &flags); + sleepq = sleepq_lend_intr_save(semaphore, false, &flags); for (;;) { prev = semaphore_dec(semaphore); @@ -55,7 +55,7 @@ semaphore_wait_slow_common(struct semaphore *semaphore, } } - sleepq_return(sleepq, flags); + sleepq_return_intr_restore(sleepq, flags); return error; } @@ -81,7 +81,7 @@ semaphore_post_slow(struct semaphore *semaphore) struct sleepq *sleepq; unsigned long flags; - sleepq = sleepq_acquire(semaphore, false, &flags); + sleepq = sleepq_acquire_intr_save(semaphore, false, &flags); if (sleepq == NULL) { return; @@ -89,5 +89,5 @@ semaphore_post_slow(struct semaphore *semaphore) sleepq_signal(sleepq); - sleepq_release(sleepq, flags); + sleepq_release_intr_restore(sleepq, flags); } -- cgit v1.2.3