xref: /openbsd/share/man/man9/atomic_add_int.9 (revision 3132a36b)
1*3132a36bSdlg.\" $OpenBSD: atomic_add_int.9,v 1.6 2014/02/13 12:05:05 dlg Exp $
21c7e942eSdlg.\"
31c7e942eSdlg.\" Copyright (c) 2014 David Gwynne <dlg@openbsd.org>
41c7e942eSdlg.\" All rights reserved.
51c7e942eSdlg.\"
61c7e942eSdlg.\" Permission to use, copy, modify, and distribute this software for any
71c7e942eSdlg.\" purpose with or without fee is hereby granted, provided that the above
81c7e942eSdlg.\" copyright notice and this permission notice appear in all copies.
91c7e942eSdlg.\"
101c7e942eSdlg.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
111c7e942eSdlg.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
121c7e942eSdlg.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
131c7e942eSdlg.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
141c7e942eSdlg.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
151c7e942eSdlg.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
161c7e942eSdlg.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
171c7e942eSdlg.\"
18c468d2a2Sdlg.Dd $Mdocdate: February 13 2014 $
193be71636Sdlg.Dt ATOMIC_ADD_INT 9
201c7e942eSdlg.Os
211c7e942eSdlg.Sh NAME
221c7e942eSdlg.Nm atomic_add_int ,
231c7e942eSdlg.Nm atomic_add_int_nv ,
241c7e942eSdlg.Nm atomic_add_long ,
251c7e942eSdlg.Nm atomic_add_long_nv
261c7e942eSdlg.Nd atomic addition operations
271c7e942eSdlg.Sh SYNOPSIS
281c7e942eSdlg.In sys/atomic.h
291c7e942eSdlg.Ft void
301c7e942eSdlg.Fn atomic_add_int "volatile unsigned int *p" "unsigned int v"
311c7e942eSdlg.Ft unsigned int
321c7e942eSdlg.Fn atomic_add_int_nv "volatile unsigned int *p" "unsigned int v"
331c7e942eSdlg.Ft void
341c7e942eSdlg.Fn atomic_add_long "volatile unsigned long *p" "unsigned long v"
351c7e942eSdlg.Ft unsigned long
361c7e942eSdlg.Fn atomic_add_long_nv "volatile unsigned long *p" "unsigned long v"
371c7e942eSdlg.Sh DESCRIPTION
381c7e942eSdlgThe atomic_add set of functions provide an interface for atomically
391c7e942eSdlgperforming add and add-and-fetch operations with respect to interrupts
401c7e942eSdlgand multiple processors in the system.
411c7e942eSdlg.Pp
421c7e942eSdlgThe value referenced by the pointer
431c7e942eSdlg.Fa p
441c7e942eSdlgis incremented by the value
451c7e942eSdlg.Fa v .
46c468d2a2Sdlg.Sh CONTEXT
47c468d2a2Sdlg.Fn atomic_add_int ,
48c468d2a2Sdlg.Fn atomic_add_int_nv ,
49c468d2a2Sdlg.Fn atomic_add_long ,
50c468d2a2Sdlgand
51c468d2a2Sdlg.Fn atomic_add_long_nv
52c468d2a2Sdlgcan all be called during autoconf, from process context, or from interrupt context.
531c7e942eSdlg.Sh RETURN VALUES
541c7e942eSdlg.Nm atomic_add_int
551c7e942eSdlgand
561c7e942eSdlg.Nm atomic_add_long
57*3132a36bSdlgperform the addition without returning any knowledge of the value at
581c7e942eSdlg.Fa p .
591c7e942eSdlg.Pp
601c7e942eSdlg.Nm atomic_add_int_nv
611c7e942eSdlgand
621c7e942eSdlg.Nm atomic_add_long_nv
631c7e942eSdlgreturn the value at
641c7e942eSdlg.Fa p
651c7e942eSdlgafter the addition was performed.
661c7e942eSdlg.Sh SEE ALSO
671c7e942eSdlg.Xr atomic_inc_int 9 ,
681c7e942eSdlg.Xr atomic_sub_int 9
691c7e942eSdlg.Sh HISTORY
701c7e942eSdlgThe atomic_add functions first appeared in
716cd55c5fSdlg.Nx 5.0
726cd55c5fSdlgand
731c7e942eSdlg.Ox 5.5 .
74