diff options
author | 2010-07-07 15:36:18 +0000 | |
---|---|---|
committer | 2010-07-07 15:36:18 +0000 | |
commit | 5ca81bd59d4f7dac39e095414812fbab93f66a94 (patch) | |
tree | 503ebaea3df9e3fbe4a649b9ad7cca59452559ad /sys | |
parent | Don't grab the kernel lock for clock interrupts. Prevents deadlocks when (diff) | |
download | wireguard-openbsd-5ca81bd59d4f7dac39e095414812fbab93f66a94.tar.xz wireguard-openbsd-5ca81bd59d4f7dac39e095414812fbab93f66a94.zip |
Implement atomic_add_ulong.
ok art@
Diffstat (limited to 'sys')
-rw-r--r-- | sys/arch/sparc64/include/atomic.h | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/sys/arch/sparc64/include/atomic.h b/sys/arch/sparc64/include/atomic.h index 4604d6bedd5..3ca239b5ee7 100644 --- a/sys/arch/sparc64/include/atomic.h +++ b/sys/arch/sparc64/include/atomic.h @@ -1,4 +1,4 @@ -/* $OpenBSD: atomic.h,v 1.5 2007/11/28 12:31:49 kettenis Exp $ */ +/* $OpenBSD: atomic.h,v 1.6 2010/07/07 15:36:18 kettenis Exp $ */ /* * Copyright (c) 2007 Artur Grabowski <art@openbsd.org> * @@ -65,5 +65,17 @@ atomic_clearbits_int(volatile unsigned int *uip, unsigned int v) } while (r != e); } +static __inline void +atomic_add_ulong(volatile unsigned long *ulp, unsigned long v) +{ + volatile unsigned long e, r; + + r = *ulp; + do { + e = r; + r = sparc64_casx(ulp, e, e + v); + } while (r != e); +} + #endif /* defined(_KERNEL) */ #endif /* _SPARC64_ATOMIC_H_ */ |