[dpdk-dev] [PATCH v5 2/4] examples: add lthread subsystem for performance-thread

Stephen Hemminger stephen at networkplumber.org
Thu Dec 3 17:31:39 CET 2015


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


More information about the dev mailing list