Kernel: Implement basic SpinLock
This commit is contained in:
17
kernel/arch/x86_64/SpinLock.S
Normal file
17
kernel/arch/x86_64/SpinLock.S
Normal file
@@ -0,0 +1,17 @@
|
||||
.global spinlock_lock_asm
|
||||
spinlock_lock_asm:
|
||||
lock; btsq $0, (%rdi)
|
||||
jnc .done
|
||||
.retry:
|
||||
pause
|
||||
testq $1, (%rdi)
|
||||
jne .retry
|
||||
lock; btsq $0, (%rdi)
|
||||
jc .retry
|
||||
.done:
|
||||
ret
|
||||
|
||||
.global spinlock_unlock_asm
|
||||
spinlock_unlock_asm:
|
||||
movq $0, (%rdi)
|
||||
ret
|
||||
@@ -6,6 +6,7 @@ KERNEL_ARCH_LIBS=
|
||||
KERNEL_ARCH_OBJS= \
|
||||
$(ARCHDIR)/boot.o \
|
||||
$(ARCHDIR)/IDT.o \
|
||||
$(ARCHDIR)/MMU.o \
|
||||
$(ARCHDIR)/interrupts.o \
|
||||
$(ARCHDIR)/MMU.o \
|
||||
$(ARCHDIR)/SpinLock.o \
|
||||
|
||||
Reference in New Issue
Block a user