Something went wrong. Try again.
Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738/* SPDX-License-Identifier: GPL-2.0 */#ifndef __TOOLS_LINUX_ATOMIC_H#define __TOOLS_LINUX_ATOMIC_H
#include <asm/atomic.h>
void atomic_long_set(atomic_long_t *v, long i);
/* atomic_cmpxchg_relaxed */#ifndef atomic_cmpxchg_relaxed#define atomic_cmpxchg_relaxed atomic_cmpxchg#define atomic_cmpxchg_release atomic_cmpxchg#endif /* atomic_cmpxchg_relaxed */
static inline bool atomic_try_cmpxchg(atomic_t *ptr, int *oldp, int new){ int ret, old = *oldp;
ret = atomic_cmpxchg(ptr, old, new); if (ret != old) *oldp = ret; return ret == old;}
static inline bool atomic_inc_unless_negative(atomic_t *v){ int c = atomic_read(v);
do { if (unlikely(c < 0)) return false; } while (!atomic_try_cmpxchg(v, &c, c + 1));
return true;}
#endif /* __TOOLS_LINUX_ATOMIC_H */