From: Derrick Brashear Date: Mon, 10 Sep 2012 18:43:08 +0000 (-0400) Subject: aix: add atomic support X-Git-Tag: openafs-stable-1_8_0pre1~2014 X-Git-Url: http://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=4505af800206c0857245c8192710a00bdf08e51c aix: add atomic support aix has an atomic facility. add support for it. Change-Id: Iaf1305fbafe1c0d7f0d22f14babfbea382c0b32d Reviewed-on: http://gerrit.openafs.org/8076 Tested-by: BuildBot Reviewed-by: Simon Wilkinson Reviewed-by: Derrick Brashear --- diff --git a/src/rx/rx_atomic.h b/src/rx/rx_atomic.h index 51e2f76..0fcc429 100644 --- a/src/rx/rx_atomic.h +++ b/src/rx/rx_atomic.h @@ -77,6 +77,58 @@ rx_atomic_sub(rx_atomic_t *atomic, int change) { InterlockedExchangeAdd(&atomic->var, 0 - change); } +#elif defined(AFS_AIX61_ENV) || defined(AFS_USR_AIX61_ENV) +#include + +typedef struct { + volatile int var; +} rx_atomic_t; + +static_inline void +rx_atomic_set(rx_atomic_t *atomic, int val) { + atomic->var = val; +} + +static_inline int +rx_atomic_read(rx_atomic_t *atomic) { + return atomic->var; +} + +static_inline void +rx_atomic_inc(rx_atomic_t *atomic) { + fetch_and_add(&atomic->var, 1); +} + +static_inline int +rx_atomic_inc_and_read(rx_atomic_t *atomic) { + return (fetch_and_add(&atomic->var, 1) + 1); +} + +static_inline void +rx_atomic_add(rx_atomic_t *atomic, int change) { + fetch_and_add(&atomic->var, change); +} + +static_inline int +rx_atomic_add_and_read(rx_atomic_t *atomic, int change) { + return (fetch_and_add(&atomic->var, change) + change); +} + +static_inline void +rx_atomic_dec(rx_atomic_t *atomic) { + fetch_and_add(&atomic->var, -1); +} + +static_inline int +rx_atomic_dec_and_read(rx_atomic_t *atomic) { + return (fetch_and_add(&atomic->var, -1) - 1); +} + +static_inline void +rx_atomic_sub(rx_atomic_t *atomic, int change) { + fetch_and_add(&atomic->var, -change); +} + #elif defined(AFS_DARWIN80_ENV) || defined(AFS_USR_DARWIN80_ENV) #include