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;
}

Reply via email to