POK(kernelpart)
/home/jaouen/pok_official/pok/trunk/kernel/include/arch/x86/spinlock.h
Go to the documentation of this file.
00001 /*
00002  *                               POK header
00003  * 
00004  * The following file is a part of the POK project. Any modification should
00005  * made according to the POK licence. You CANNOT use this file or a part of
00006  * this file is this part of a file for your own project
00007  *
00008  * For more information on the POK licence, please see our LICENCE FILE
00009  *
00010  * Please follow the coding guidelines described in doc/CODING_GUIDELINES
00011  *
00012  *                                      Copyright (c) 2007-2009 POK team 
00013  *
00014  * Created by julien on Thu Jan 15 23:34:13 2009 
00015  */
00016 
00017 
00018 #ifndef __POK_SPINLOCK_H__
00019 #define __POK_SPINLOCK_H__
00020 
00021 typedef unsigned char pok_spinlock_t;
00022 
00023 #define SPIN_UNLOCK(_spin_)                                     \
00024 {                                                               \
00025   (_spin_) = 0;                                                 \
00026 }
00027 
00028 #define SPIN_LOCK(_spin_)                                       \
00029   asm volatile ("mov $1, %%al           \n\t"                   \
00030                 "1:                     \n\t"                   \
00031                 "lock xchg %0, %%al     \n\t"                   \
00032                 "test %%al, %%al        \n\t"                   \
00033                 "jnz 1b                 \n\t"                   \
00034                 :                                               \
00035                 : "m" (_spin_)                                  \
00036                 : "%al")
00037 
00038 #endif /* !__POK_SPINLOCK_H__ */