summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2010-07-07 15:36:18 +0000
committerkettenis <kettenis@openbsd.org>2010-07-07 15:36:18 +0000
commit5ca81bd59d4f7dac39e095414812fbab93f66a94 (patch)
tree503ebaea3df9e3fbe4a649b9ad7cca59452559ad /sys
parentDon't grab the kernel lock for clock interrupts. Prevents deadlocks when (diff)
downloadwireguard-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.h14
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_ */