Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/lib/libc/atomic With help from rmind@, describe the non-inte...



details:   https://anonhg.NetBSD.org/src/rev/6af132bd22eb
branches:  trunk
changeset: 752070:6af132bd22eb
user:      dyoung <dyoung%NetBSD.org@localhost>
date:      Fri Feb 12 22:23:17 2010 +0000

description:
With help from rmind@, describe the non-interlocked (*_ni) variants of
the standard atomic compare-and-swap operations.  Tell some caveats.

Manual page links, *_ni.3 -> atomic_cas.3 are coming up after a
successful 'build.sh distribution'.

diffstat:

 lib/libc/atomic/atomic_cas.3 |  47 ++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 43 insertions(+), 4 deletions(-)

diffs (87 lines):

diff -r 5d9f8c11834a -r 6af132bd22eb lib/libc/atomic/atomic_cas.3
--- a/lib/libc/atomic/atomic_cas.3      Fri Feb 12 22:19:23 2010 +0000
+++ b/lib/libc/atomic/atomic_cas.3      Fri Feb 12 22:23:17 2010 +0000
@@ -1,6 +1,6 @@
-.\"    $NetBSD: atomic_cas.3,v 1.1 2008/06/23 10:22:40 ad Exp $
+.\"    $NetBSD: atomic_cas.3,v 1.2 2010/02/12 22:23:17 dyoung Exp $
 .\"
-.\" Copyright (c) 2007 The NetBSD Foundation, Inc.
+.\" Copyright (c) 2007, 2010 The NetBSD Foundation, Inc.
 .\" All rights reserved.
 .\"
 .\" This code is derived from software contributed to The NetBSD Foundation
@@ -27,7 +27,7 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd April 11, 2007
+.Dd February 11, 2010
 .Dt ATOMIC_CAS 3
 .Os
 .Sh NAME
@@ -36,7 +36,12 @@
 .Nm atomic_cas_uint ,
 .Nm atomic_cas_ulong ,
 .Nm atomic_cas_ptr ,
-.Nm atomic_cas_64
+.Nm atomic_cas_64 ,
+.Nm atomic_cas_32_ni ,
+.Nm atomic_cas_uint_ni ,
+.Nm atomic_cas_ulong_ni ,
+.Nm atomic_cas_ptr_ni ,
+.Nm atomic_cas_64_ni
 .Nd atomic compare-and-swap operations
 .\" .Sh LIBRARY
 .\" .Lb libc
@@ -54,6 +59,18 @@
 .Fn atomic_cas_ptr "volatile void *ptr" "void *old" "void *new"
 .Ft uint64_t
 .Fn atomic_cas_64 "volatile uint64_t *ptr" "uint64_t old" "uint64_t new"
+.Ft uint32_t
+.Fn atomic_cas_32_ni "volatile uint32_t *ptr" "uint32_t old" "uint32_t new"
+.Ft unsigned int
+.Fn atomic_cas_uint_ni "volatile unsigned int *ptr" "unsigned int old" \
+    "unsigned int new"
+.Ft unsigned long
+.Fn atomic_cas_ulong_ni "volatile unsigned long *ptr" "unsigned long old" \
+    "unsigned long new"
+.Ft void *
+.Fn atomic_cas_ptr_ni "volatile void *ptr" "void *old" "void *new"
+.Ft uint64_t
+.Fn atomic_cas_64_ni "volatile uint64_t *ptr" "uint64_t old" "uint64_t new"
 .Sh DESCRIPTION
 The
 .Nm atomic_cas
@@ -75,6 +92,20 @@
 .Fa old ;
 if they are equal then the new value was stored.
 .Pp
+The non-interlocked variants,
+.Fn *_ni ,
+guarantee atomicity within the same CPU with respect to
+interrupts and preemption.
+For example, they are suitable for synchronizing compare-and-swap
+operations on a variable shared by a thread and an interrupt
+that are bound to the same CPU.
+The
+.Fn *_ni
+variants are not atomic with respect to different CPUs.
+.Fn *_ni
+variants should avoid the interprocessor synchronization overhead
+of the standard compare-and-swap operations.
+.Pp
 The 64-bit variants of these functions are available only on platforms
 that can support atomic 64-bit memory access.
 Applications can check for the availability of 64-bit atomic memory
@@ -88,3 +119,11 @@
 .Nm atomic_cas
 functions first appeared in
 .Nx 5.0 .
+.Sh NOTES
+On some architectures, a
+.Fn *_ni
+variant is merely an alias for the corresponding standard
+compare-and-swap operation.
+While the non-interlocked variant behaves correctly on those
+architectures, it does not avoid the interprocessor synchronization
+overhead.



Home | Main Index | Thread Index | Old Index