From e20ff7483c099521a68628d52be335e6177c6992 Mon Sep 17 00:00:00 2001 From: songyanguang <345810377@qq.com> Date: Wed, 25 Dec 2024 19:31:55 +0800 Subject: [PATCH] Modify _spinlock_lock --- .../intr/riscv/rv64gc/hard_spinlock.S | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Ubiquitous/XiZi_AIoT/hardkernel/intr/riscv/rv64gc/hard_spinlock.S b/Ubiquitous/XiZi_AIoT/hardkernel/intr/riscv/rv64gc/hard_spinlock.S index b26cf30f3..970369a92 100644 --- a/Ubiquitous/XiZi_AIoT/hardkernel/intr/riscv/rv64gc/hard_spinlock.S +++ b/Ubiquitous/XiZi_AIoT/hardkernel/intr/riscv/rv64gc/hard_spinlock.S @@ -57,6 +57,16 @@ Modification: .global _spinlock_lock .func _spinlock_lock _spinlock_lock: + mv s0, a0 + li a0, 0 # cpu_get_current + mv a1, a0 + mv a0, s0 + li a2, UNLOCKED +1: + lr.w a3, (a0) + beq a3, a1, 1b + sc.w a4, a1, (a0) + bnez a4, 1b ret .endfunc @@ -65,6 +75,18 @@ _spinlock_lock: .global _spinlock_unlock .func _spinlock_unlock _spinlock_unlock: + mv s0, a0 + li a0, 0 # cpu_get_current + mv a1, a0 + mv a0, s0 + li a2, UNLOCKED + lw a3, (a0) + bne a3, a1, 1f + sw a2, (a0) + li a0, 0 + ret +1: + li a0, -1 ret .endfunc