eal/ppc: fix 64-bit atomic exchange operation
authorDavid Christensen <drc@linux.vnet.ibm.com>
Tue, 15 Oct 2019 21:16:14 +0000 (14:16 -0700)
committerDavid Marchand <david.marchand@redhat.com>
Thu, 17 Oct 2019 04:59:11 +0000 (06:59 +0200)
The rte_atomic64_exchange operation for ppc_64 incorrectly linked
back to a 32 bit generic operation (__atomic_exchange_4) rather than
the 64 bit generic operation (__atomic_exchange_8).  As a result,
applications that used rte_eth_link_get_nowait() would only receive
the link speed, they would not receive the link state, link duplex,
or link autoneg properties.

Fixes: ff2863570fcc ("eal: introduce atomic exchange operation")
Cc: stable@dpdk.org
Signed-off-by: David Christensen <drc@linux.vnet.ibm.com>
Reviewed-by: David Marchand <david.marchand@redhat.com>
lib/librte_eal/common/include/arch/ppc_64/rte_atomic.h

index b13a80d..7e3e131 100644 (file)
@@ -401,7 +401,7 @@ static inline void rte_atomic64_clear(rte_atomic64_t *v)
 static inline uint64_t
 rte_atomic64_exchange(volatile uint64_t *dst, uint64_t val)
 {
-       return __atomic_exchange_4(dst, val, __ATOMIC_SEQ_CST);
+       return __atomic_exchange_8(dst, val, __ATOMIC_SEQ_CST);
 }
 
 #endif