From 1575e160f364c3167b9f9dc5a7fa1aa45a5728ec Mon Sep 17 00:00:00 2001 From: Yury Popov Date: Wed, 22 May 2019 16:29:53 +0300 Subject: [PATCH] Mutex refactoring --- src/kernlib/include/kernlib/mutex.hpp | 21 +++++++++++++++++++-- src/kernlib/mutex.cpp | 23 ----------------------- 2 files changed, 19 insertions(+), 25 deletions(-) delete mode 100644 src/kernlib/mutex.cpp diff --git a/src/kernlib/include/kernlib/mutex.hpp b/src/kernlib/include/kernlib/mutex.hpp index 515c898..5d5bb4c 100644 --- a/src/kernlib/include/kernlib/mutex.hpp +++ b/src/kernlib/include/kernlib/mutex.hpp @@ -9,6 +9,23 @@ class Mutex { bool state; public: Mutex(): state(0) {} - void lock(); - void release(); + inline void lock() { + asm volatile( + "1:" + "testw $1, %0; jnz 1b;" + "lock btsw $0, %0; jc 1b;" + ::"m"(state)); + } + inline bool try_lock() { + bool ret = 0; + asm volatile( + "lock btsw $0, %1; jc 1f;" + "mov $1, %0;" + "1:" + :"=r"(ret):"m"(state)); + return ret; + } + inline void release() { + asm volatile("movw $0, %0"::"m"(state)); + } }; diff --git a/src/kernlib/mutex.cpp b/src/kernlib/mutex.cpp deleted file mode 100644 index 981ee1b..0000000 --- a/src/kernlib/mutex.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// PhoeniX OS Kernel library mutex functions -// Copyright © 2017 Yury Popov a.k.a. PhoeniX - -#include "kernlib.hpp" - -void Mutex::lock() { - asm volatile( - "1:" - "mov $1, %%dl;" - "xor %%al, %%al;" - "lock cmpxchgb %%dl, %0;" - "jnz 1b" - ::"m"(state) - :"rax","rdx"); -} - -void Mutex::release() { - asm volatile( - "xor %%al, %%al;" - "lock xchgb %%al, %0" - ::"m"(state) - :"rax"); -}