diff options
author | Richard Braun <rbraun@sceen.net> | 2018-07-10 19:40:05 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2018-07-10 19:40:05 +0200 |
commit | 9ea1595a9156f2818b216d883e25f63bd74459c0 (patch) | |
tree | aacf50829edcdce7a356c6bc8d629be82238e5fd /kern/semaphore.c | |
parent | 7cab594590002ff3737629b76083a298616b665a (diff) |
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.
Diffstat (limited to 'kern/semaphore.c')
-rw-r--r-- | kern/semaphore.c | 8 |
1 files changed, 4 insertions, 4 deletions
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); } |