Blame view

include/linux/atomic.h 914 Bytes
3f9d35b95   Eric Dumazet   atomic: add atomi...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  #ifndef _LINUX_ATOMIC_H
  #define _LINUX_ATOMIC_H
  #include <asm/atomic.h>
  
  /**
   * atomic_inc_not_zero_hint - increment if not null
   * @v: pointer of type atomic_t
   * @hint: probable value of the atomic before the increment
   *
   * This version of atomic_inc_not_zero() gives a hint of probable
   * value of the atomic. This helps processor to not read the memory
   * before doing the atomic read/modify/write cycle, lowering
   * number of bus transactions on some arches.
   *
   * Returns: 0 if increment was not done, 1 otherwise.
   */
  #ifndef atomic_inc_not_zero_hint
  static inline int atomic_inc_not_zero_hint(atomic_t *v, int hint)
  {
  	int val, c = hint;
  
  	/* sanity test, should be removed by compiler if hint is a constant */
  	if (!hint)
  		return atomic_inc_not_zero(v);
  
  	do {
  		val = atomic_cmpxchg(v, c, c + 1);
  		if (val == c)
  			return 1;
  		c = val;
  	} while (c);
  
  	return 0;
  }
  #endif
  
  #endif /* _LINUX_ATOMIC_H */