Commit cbee6197 authored by Mark Andrews's avatar Mark Andrews
Browse files

2713. [bug] powerpc: atomic operations missing asm("ics") /

                        __isync() calls.
parent ef9ee925
2713. [bug] powerpc: atomic operations missing asm("ics") /
__isync() calls.
--- 9.7.0b1 released ---
2712. [func] New 'auto-dnssec' zone option allows zone signing
......
......@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: atomic.h,v 1.6 2007/06/18 23:47:47 tbox Exp $ */
/* $Id: atomic.h,v 1.7 2009/10/14 03:54:23 marka Exp $ */
#ifndef ISC_ATOMIC_H
#define ISC_ATOMIC_H 1
......@@ -46,9 +46,33 @@
#include <sys/atomic_op.h>
#define isc_atomic_xadd(p, v) fetch_and_add(p, v)
#define isc_atomic_store(p, v) _clear_lock(p, v)
#ifdef __GNUC__
static inline isc_int32_t
#else
static isc_int32_t
#endif
isc_atomic_xadd(isc_int32_t *p, isc_int32_t val) {
int ret;
#ifdef __GNUC__
asm("ics");
#else
__isync();
#endif
ret = fetch_and_add((atomic_p)p, (int)val);
#ifdef __GNUC__
asm("ics");
#else
__isync();
#endif
return (ret);
}
#ifdef __GNUC__
static inline int
#else
......@@ -63,7 +87,14 @@ isc_atomic_cmpxchg(atomic_p p, int old, int new) {
__isync();
#endif
if (compare_and_swap(p, &orig, new))
return (old);
orig = old;
#ifdef __GNUC__
asm("ics");
#else
__isync();
#endif
return (orig);
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment