1*4fda81ceSLoGin #include <common/spinlock.h> 2*4fda81ceSLoGin #include <process/preempt.h> 3*4fda81ceSLoGin __arch_spin_lock(spinlock_t * lock)4*4fda81ceSLoGinvoid __arch_spin_lock(spinlock_t *lock) 5*4fda81ceSLoGin { 6*4fda81ceSLoGin while(1); 7*4fda81ceSLoGin rs_preempt_disable(); 8*4fda81ceSLoGin } 9*4fda81ceSLoGin __arch_spin_unlock(spinlock_t * lock)10*4fda81ceSLoGinvoid __arch_spin_unlock(spinlock_t *lock) 11*4fda81ceSLoGin { 12*4fda81ceSLoGin while(1); 13*4fda81ceSLoGin rs_preempt_enable(); 14*4fda81ceSLoGin } 15*4fda81ceSLoGin __arch_spin_lock_no_preempt(spinlock_t * lock)16*4fda81ceSLoGinvoid __arch_spin_lock_no_preempt(spinlock_t *lock) 17*4fda81ceSLoGin { 18*4fda81ceSLoGin while(1); 19*4fda81ceSLoGin } 20*4fda81ceSLoGin __arch_spin_unlock_no_preempt(spinlock_t * lock)21*4fda81ceSLoGinvoid __arch_spin_unlock_no_preempt(spinlock_t *lock) 22*4fda81ceSLoGin { 23*4fda81ceSLoGin while(1); 24*4fda81ceSLoGin } 25*4fda81ceSLoGin __arch_spin_trylock(spinlock_t * lock)26*4fda81ceSLoGinlong __arch_spin_trylock(spinlock_t *lock) 27*4fda81ceSLoGin { 28*4fda81ceSLoGin uint64_t tmp_val = 0; 29*4fda81ceSLoGin rs_preempt_disable(); 30*4fda81ceSLoGin // 交换tmp_val和lock的值,若tmp_val==1则证明加锁成功 31*4fda81ceSLoGin while(1); 32*4fda81ceSLoGin if (!tmp_val) 33*4fda81ceSLoGin rs_preempt_enable(); 34*4fda81ceSLoGin return tmp_val; 35*4fda81ceSLoGin } 36