Skip to content

Commit

Permalink
Kernel: Minor SpinLock improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
tomuta authored and awesomekling committed Nov 11, 2020
1 parent e26e044 commit b4c9e85
Showing 1 changed file with 7 additions and 9 deletions.
16 changes: 7 additions & 9 deletions Kernel/SpinLock.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,8 @@ class SpinLock {
{
u32 prev_flags;
Processor::current().enter_critical(prev_flags);
BaseType expected = 0;
while (!m_lock.compare_exchange_strong(expected, 1, AK::memory_order_acq_rel)) {
while (m_lock.exchange(1, AK::memory_order_acquire) != 0) {
Processor::wait_check();
expected = 0;
}
return prev_flags;
}
Expand All @@ -62,12 +60,12 @@ class SpinLock {

ALWAYS_INLINE bool is_locked() const
{
return m_lock.load(AK::memory_order_consume) != 0;
return m_lock.load(AK::memory_order_relaxed) != 0;
}

ALWAYS_INLINE void initialize()
{
m_lock.store(0, AK::memory_order_release);
m_lock.store(0, AK::memory_order_relaxed);
}

private:
Expand Down Expand Up @@ -101,25 +99,25 @@ class RecursiveSpinLock {
ALWAYS_INLINE void unlock(u32 prev_flags)
{
ASSERT(m_recursions > 0);
ASSERT(m_lock.load(AK::memory_order_consume) == FlatPtr(&Processor::current()));
ASSERT(m_lock.load(AK::memory_order_relaxed) == FlatPtr(&Processor::current()));
if (--m_recursions == 0)
m_lock.store(0, AK::memory_order_release);
Processor::current().leave_critical(prev_flags);
}

ALWAYS_INLINE bool is_locked() const
{
return m_lock.load(AK::memory_order_consume) != 0;
return m_lock.load(AK::memory_order_relaxed) != 0;
}

ALWAYS_INLINE bool own_lock() const
{
return m_lock.load(AK::memory_order_consume) == FlatPtr(&Processor::current());
return m_lock.load(AK::memory_order_relaxed) == FlatPtr(&Processor::current());
}

ALWAYS_INLINE void initialize()
{
m_lock.store(0, AK::memory_order_release);
m_lock.store(0, AK::memory_order_relaxed);
}

private:
Expand Down

0 comments on commit b4c9e85

Please sign in to comment.