~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/arch/x86/include/asm/atomic.h

Version: ~ [ linux-5.3 ] ~ [ linux-5.2.14 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.72 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.143 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.192 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.192 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.73 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef _TOOLS_LINUX_ASM_X86_ATOMIC_H
  2 #define _TOOLS_LINUX_ASM_X86_ATOMIC_H
  3 
  4 #include <linux/compiler.h>
  5 #include <linux/types.h>
  6 #include "rmwcc.h"
  7 
  8 #define LOCK_PREFIX "\n\tlock; "
  9 
 10 /*
 11  * Atomic operations that C can't guarantee us.  Useful for
 12  * resource counting etc..
 13  */
 14 
 15 #define ATOMIC_INIT(i)  { (i) }
 16 
 17 /**
 18  * atomic_read - read atomic variable
 19  * @v: pointer of type atomic_t
 20  *
 21  * Atomically reads the value of @v.
 22  */
 23 static inline int atomic_read(const atomic_t *v)
 24 {
 25         return ACCESS_ONCE((v)->counter);
 26 }
 27 
 28 /**
 29  * atomic_set - set atomic variable
 30  * @v: pointer of type atomic_t
 31  * @i: required value
 32  *
 33  * Atomically sets the value of @v to @i.
 34  */
 35 static inline void atomic_set(atomic_t *v, int i)
 36 {
 37         v->counter = i;
 38 }
 39 
 40 /**
 41  * atomic_inc - increment atomic variable
 42  * @v: pointer of type atomic_t
 43  *
 44  * Atomically increments @v by 1.
 45  */
 46 static inline void atomic_inc(atomic_t *v)
 47 {
 48         asm volatile(LOCK_PREFIX "incl %0"
 49                      : "+m" (v->counter));
 50 }
 51 
 52 /**
 53  * atomic_dec_and_test - decrement and test
 54  * @v: pointer of type atomic_t
 55  *
 56  * Atomically decrements @v by 1 and
 57  * returns true if the result is 0, or false for all other
 58  * cases.
 59  */
 60 static inline int atomic_dec_and_test(atomic_t *v)
 61 {
 62         GEN_UNARY_RMWcc(LOCK_PREFIX "decl", v->counter, "%0", "e");
 63 }
 64 
 65 #endif /* _TOOLS_LINUX_ASM_X86_ATOMIC_H */
 66 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp