summaryrefslogtreecommitdiffstats
path: root/src/kernel/spinlock.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/spinlock.C')
-rw-r--r--src/kernel/spinlock.C11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/kernel/spinlock.C b/src/kernel/spinlock.C
index bfada05c4..5c67d8ad9 100644
--- a/src/kernel/spinlock.C
+++ b/src/kernel/spinlock.C
@@ -1,9 +1,18 @@
#include <kernel/spinlock.H>
+#include <arch/ppc.H>
void Spinlock::lock()
{
uint64_t reservation = __sync_fetch_and_add(&iv_reserve, 1);
- while(iv_ready != reservation);
+ if (iv_ready != reservation)
+ {
+ do
+ {
+ setThreadPriorityLow();
+ }
+ while(iv_ready != reservation);
+ setThreadPriorityHigh();
+ }
}
void Spinlock::unlock()
OpenPOWER on IntegriCloud