1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 10:57:34 +00:00

Always inline the locks.

This commit is contained in:
Andreas Kling 2019-01-14 14:14:30 +01:00
parent 11331e9639
commit b4da4e8fbd

View file

@ -26,16 +26,17 @@ static inline dword CAS(volatile dword* mem, dword newval, dword oldval)
"cmpxchgl %2, %1" "cmpxchgl %2, %1"
:"=a"(ret), "+m"(*mem) :"=a"(ret), "+m"(*mem)
:"r"(newval), "0"(oldval) :"r"(newval), "0"(oldval)
:"memory"); :"cc", "memory");
return ret; return ret;
} }
// FIXME: Rename to YieldingLock?
class SpinLock { class SpinLock {
public: public:
SpinLock() { } SpinLock() { }
~SpinLock() { } ~SpinLock() { }
void lock(const char* func = nullptr) ALWAYS_INLINE void lock(const char* func = nullptr)
{ {
(void)func; (void)func;
#ifdef DEBUG_LOCKS #ifdef DEBUG_LOCKS
@ -56,7 +57,7 @@ public:
} }
} }
void unlock(const char* func = nullptr) ALWAYS_INLINE void unlock(const char* func = nullptr)
{ {
(void)func; (void)func;
// barrier(); // barrier();
@ -79,10 +80,10 @@ private:
class Locker { class Locker {
public: public:
explicit Locker(SpinLock& l, const char* func) : m_lock(l), m_func(func) { lock(); } ALWAYS_INLINE explicit Locker(SpinLock& l, const char* func) : m_lock(l), m_func(func) { lock(); }
~Locker() { unlock(); } ALWAYS_INLINE ~Locker() { unlock(); }
void unlock() { m_lock.unlock(m_func); } ALWAYS_INLINE void unlock() { m_lock.unlock(m_func); }
void lock() { m_lock.lock(m_func); } ALWAYS_INLINE void lock() { m_lock.lock(m_func); }
private: private:
SpinLock& m_lock; SpinLock& m_lock;