From mboxrd@z Thu Jan 1 00:00:00 1970 From: pbonzini@redhat.com (Paolo Bonzini) Date: Fri, 12 Nov 2010 09:57:26 +0100 Subject: [ltt-dev] [PATCH 1/2] use generic-size operations for common implementation of atomic ops In-Reply-To: <1289552247-18130-1-git-send-email-pbonzini@redhat.com> References: <1289552247-18130-1-git-send-email-pbonzini@redhat.com> Message-ID: <1289552247-18130-2-git-send-email-pbonzini@redhat.com> The definition of _uatomic_cmpxchg is different in x86 and other architectures. For x86 it is a 4-argument macro, for other architectures it is a 3-argument function. The next patch will use uatomic_cmpxchg in uatomic_generic.h even on x86: adjust existing uses of the underscore-prefixed variant for consistency. Signed-off-by: Paolo Bonzini --- urcu/uatomic_generic.h | 24 ++++++++++++++++-------- 1 files changed, 16 insertions(+), 8 deletions(-) diff --git a/urcu/uatomic_generic.h b/urcu/uatomic_generic.h index f65b398..383ddfa 100644 --- a/urcu/uatomic_generic.h +++ b/urcu/uatomic_generic.h @@ -201,7 +201,8 @@ unsigned long _uatomic_add_return(void *addr, unsigned long val, int len) oldt = uatomic_read((unsigned char *)addr); do { old = oldt; - oldt = _uatomic_cmpxchg(addr, old, old + val, 1); + oldt = uatomic_cmpxchg((unsigned char *)addr, + old, old + val); } while (oldt != old); return old + val; @@ -215,7 +216,8 @@ unsigned long _uatomic_add_return(void *addr, unsigned long val, int len) oldt = uatomic_read((unsigned short *)addr); do { old = oldt; - oldt = _uatomic_cmpxchg(addr, old, old + val, 2); + oldt = uatomic_cmpxchg((unsigned short *)addr, + old, old + val); } while (oldt != old); return old + val; @@ -228,7 +230,8 @@ unsigned long _uatomic_add_return(void *addr, unsigned long val, int len) oldt = uatomic_read((unsigned int *)addr); do { old = oldt; - oldt = _uatomic_cmpxchg(addr, old, old + val, 4); + oldt = uatomic_cmpxchg((unsigned int *)addr, + old, old + val); } while (oldt != old); return old + val; @@ -241,7 +244,8 @@ unsigned long _uatomic_add_return(void *addr, unsigned long val, int len) oldt = uatomic_read((unsigned long *)addr); do { old = oldt; - oldt = _uatomic_cmpxchg(addr, old, old + val, 8); + oldt = uatomic_cmpxchg((unsigned long *)addr, + old, old + val); } while (oldt != old); return old + val; @@ -273,7 +277,8 @@ unsigned long _uatomic_exchange(void *addr, unsigned long val, int len) oldt = uatomic_read((unsigned char *)addr); do { old = oldt; - oldt = _uatomic_cmpxchg(addr, old, val, 1); + oldt = uatomic_cmpxchg((unsigned char *)addr, + old, val); } while (oldt != old); return old; @@ -287,7 +292,8 @@ unsigned long _uatomic_exchange(void *addr, unsigned long val, int len) oldt = uatomic_read((unsigned short *)addr); do { old = oldt; - oldt = _uatomic_cmpxchg(addr, old, val, 2); + oldt = uatomic_cmpxchg((unsigned short *)addr, + old, val); } while (oldt != old); return old; @@ -300,7 +306,8 @@ unsigned long _uatomic_exchange(void *addr, unsigned long val, int len) oldt = uatomic_read((unsigned int *)addr); do { old = oldt; - oldt = _uatomic_cmpxchg(addr, old, val, 4); + oldt = uatomic_cmpxchg((unsigned int *)addr, + old, val); } while (oldt != old); return old; @@ -313,7 +320,8 @@ unsigned long _uatomic_exchange(void *addr, unsigned long val, int len) oldt = uatomic_read((unsigned long *)addr); do { old = oldt; - oldt = _uatomic_cmpxchg(addr, old, val, 8); + oldt = uatomic_cmpxchg((unsigned long *)addr, + old, val); } while (oldt != old); return old; -- 1.7.3.2