mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-08 23:32:05 -04:00
2713. [bug] powerpc: atomic operations missing asm("ics") /
__isync() calls.
This commit is contained in:
parent
ef9ee92543
commit
cbee6197d1
2 changed files with 37 additions and 3 deletions
3
CHANGES
3
CHANGES
|
|
@ -1,3 +1,6 @@
|
|||
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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue