diff options
Diffstat (limited to 'src/kernel/spinlock.C')
-rw-r--r-- | src/kernel/spinlock.C | 11 |
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() |