[dpdk-dev] x86: fix atomic exchange for 32-bit

Message ID 1525269506-18710-1-git-send-email-konstantin.ananyev@intel.com (mailing list archive)
State Accepted, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Ananyev, Konstantin May 2, 2018, 1:58 p.m. UTC
  should break out of loop when rte_atomic64_cmpset() retruns non-zero.

Fixes: ff2863570fcc ("eal: introduce atomic exchange operation")

Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
---
 lib/librte_eal/common/include/arch/x86/rte_atomic_32.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Ferruh Yigit May 2, 2018, 4:44 p.m. UTC | #1
On 5/2/2018 2:58 PM, Konstantin Ananyev wrote:
> should break out of loop when rte_atomic64_cmpset() retruns non-zero.
> 
> Fixes: ff2863570fcc ("eal: introduce atomic exchange operation")
> 
> Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>

Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
Tested-by: Ferruh Yigit <ferruh.yigit@intel.com>
  
Thomas Monjalon May 2, 2018, 5:23 p.m. UTC | #2
02/05/2018 18:44, Ferruh Yigit:
> On 5/2/2018 2:58 PM, Konstantin Ananyev wrote:
> > should break out of loop when rte_atomic64_cmpset() retruns non-zero.
> > 
> > Fixes: ff2863570fcc ("eal: introduce atomic exchange operation")
> > 
> > Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
> 
> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
> Tested-by: Ferruh Yigit <ferruh.yigit@intel.com>

Applied, thanks
  

Patch

diff --git a/lib/librte_eal/common/include/arch/x86/rte_atomic_32.h b/lib/librte_eal/common/include/arch/x86/rte_atomic_32.h
index 8d711b6f6..a932f3540 100644
--- a/lib/librte_eal/common/include/arch/x86/rte_atomic_32.h
+++ b/lib/librte_eal/common/include/arch/x86/rte_atomic_32.h
@@ -105,7 +105,7 @@  rte_atomic64_exchange(volatile uint64_t *dest, uint64_t val)
 
 	do {
 		old = *dest;
-	} while (rte_atomic64_cmpset(dest, old, val));
+	} while (rte_atomic64_cmpset(dest, old, val) == 0);
 
 	return old;
 }