On Thu, 3 Dec 2015 09:28:23 +0000 ibetts <ian.betts at intel.com> wrote:
> +/* > + * Atomically set a value and return the old value > + */ > +static inline uint64_t > +atomic64_xchg(uint64_t *ptr, uint64_t val) __attribute__ ((always_inline)); > +static inline uint64_t > +atomic64_xchg(uint64_t *ptr, uint64_t val) You don't need a forward declaration for this. Instead do: static inline uint64_t __attribute__((always_inline)) atomic_xchg64(uint64_t *ptr, uint64_t val) Really should be in rte_atomic.h as a primitive and the assembly macro is missing change to ptr so Gcc might optmize it away. Something like this mayb? static inline uint64_t __attribute__ ((always_inline)); rte_atomic64_xchg(uint64_t *ptr, uint64_t val) { asm volatile ( MPLOCKED "xchgq %[ptr],%[val];" : [val] "=r" (val) [ptr] "=m" (*ptr) : [ptr] "m" (*ptr), "a" (val) : "memory"); return val; }