aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/kernel/spinlock.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/kernel/kernel/spinlock.cc b/kernel/kernel/spinlock.cc
index a57206d..49ebc36 100644
--- a/kernel/kernel/spinlock.cc
+++ b/kernel/kernel/spinlock.cc
@@ -16,12 +16,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "boot/interrupts.h"
#include <kernel/spinlock.h>
void
Spinlock::acquire(void)
{
- __asm__ volatile("cli");
+ Interrupts::disable();
while (!__sync_bool_compare_and_swap(&m_lock, 0, 1))
while (m_lock)
__asm__ volatile("rep; nop");
@@ -31,5 +32,6 @@ void
Spinlock::release(void)
{
__sync_bool_compare_and_swap(&m_lock, 1, 0);
- // __asm__ volatile("sti");
+ if (Interrupts::idt_loaded())
+ Interrupts::enable();
}