diff options
Diffstat (limited to 'backport/include/linux/atomic.h')
| -rw-r--r-- | backport/include/linux/atomic.h | 46 | 
1 files changed, 46 insertions, 0 deletions
| diff --git a/backport/include/linux/atomic.h b/backport/include/linux/atomic.h new file mode 100644 index 00000000..378b748f --- /dev/null +++ b/backport/include/linux/atomic.h @@ -0,0 +1,46 @@ +#ifndef _COMPAT_LINUX_ATOMIC_H +#define _COMPAT_LINUX_ATOMIC_H 1 + +#include <linux/version.h> + +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,36)) +#include_next <linux/atomic.h> +#else + +#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_VERSION_CODE > KERNEL_VERSION(2,6,36)) */ + +#endif	/* _COMPAT_LINUX_ATOMIC_H */ | 
