#include CK_CC_INLINE static void spin_lock(volatile unsigned int *lock) { #ifdef __x86_64__ __asm__ __volatile__( "\n1:\t" "lock ; decl %0\n\t" "jns 2f\n" "3:\n" "rep;nop\n\t" "cmpl $0,%0\n\t" "jle 3b\n\t" "jmp 1b\n" "2:\t" : "=m" (*lock) : : "memory"); #else *lock = 1; #endif return; } CK_CC_INLINE static void spin_unlock(volatile unsigned int *lock) { #ifdef __x86_64__ __asm__ __volatile__("movl $1,%0" :"=m" (*lock) :: "memory"); #else *lock = 0; return; #endif } #define LOCK_NAME "linux_spinlock" #define LOCK_DEFINE volatile unsigned int lock = 1 #define LOCK spin_lock(&lock) #define UNLOCK spin_unlock(&lock)