> Date: Sun, 13 Mar 2022 22:43:56 +0100 > From: Alexander Bluhm <[email protected]> > > On Thu, Mar 10, 2022 at 10:12:40PM +0100, Mark Kettenis wrote: > > > Date: Thu, 10 Mar 2022 21:53:13 +0100 > > > From: Alexander Bluhm <[email protected]> > > > > > > Hi, > > > > > > claudio@ mentioned that documentation for membar_enter_after_atomic > > > and membar_exit_before_atomic is missing. > > > > > > ok? > > > > I think this is fine, although it doesn't actually define what an > > "atomic operation" is in this context. Now we we only actually > > provide an optimized implementation on x86; on all other architectures > > that we support, these are just aliases for membar_enter() and > > membar_exit(). So all x86 operations that perform a bus lock are > > supported. However the atomic_load_xxx() and atomic_store_xxx() > > operations you just introduced do not fall into this category. > > I added a paragraph explaining where membar atomic can be used.
You missed atomic_cas. > > Not sure if that needs spelling out. And if it does, maybe the chosen > > names for those functions are wrong? > > Names atomic_load/store are used in FreeBSD and NetBSD. Linux calls > them atomic_read/set. Best to stick with the FreeBSD and NetBSD names. > Index: share/man/man9/membar_sync.9 > =================================================================== > RCS file: /data/mirror/openbsd/cvs/src/share/man/man9/membar_sync.9,v > retrieving revision 1.3 > diff -u -p -r1.3 membar_sync.9 > --- share/man/man9/membar_sync.9 14 Feb 2014 05:11:55 -0000 1.3 > +++ share/man/man9/membar_sync.9 13 Mar 2022 20:59:27 -0000 > @@ -35,7 +35,9 @@ > .Nm membar_exit , > .Nm membar_producer , > .Nm membar_consumer , > -.Nm membar_sync > +.Nm membar_sync , > +.Nm membar_enter_after_atomic , > +.Nm membar_exit_before_atomic > .Nd memory access barrier operations > .Sh SYNOPSIS > .In sys/atomic.h > @@ -49,6 +51,10 @@ > .Fn membar_consumer "void" > .Ft void > .Fn membar_sync "void" > +.Ft void > +.Fn membar_enter_after_atomic "void" > +.Ft void > +.Fn membar_exit_before_atomic "void" > .Sh DESCRIPTION > The membar set of functions provide an interface for issuing memory barrier > access operations with respect to multiple processors in the system. > @@ -79,14 +85,38 @@ after the memory barrier complete. > All loads and stores preceding the memory barrier will complete and > reach global visibility before any loads and stores after the memory > barrier complete and reach global visibility. > +.It Fn membar_enter_after_atomic > +An atomic operation preceding > +.Fn membar_enter_after_atomic > +will reach global visibility before all loads and stores following it. > +The atomic operation is used to protect the start of a critical section. > +.It Fn membar_exit_before_atomic > +All loads and stores preceding > +.Fn membar_exit_before_atomic > +will reach global visibility before atomic operation that follows it. > +The atomic operation is used to protect the end of a critical section. > .El > +.Pp > +The atomic operations that can be used with > +.Fn membar_enter_after_atomic > +and > +.Fn membar_exit_before_atomic > +are the atomic_add, atomic_sub, atomic_inc, and atomic_dec set of > +functions. > +For other cases use > +.Fn membar_enter > +or > +.Fn membar_exit . > .Sh CONTEXT > .Fn membar_enter , > .Fn membar_exit , > .Fn membar_producer , > .Fn membar_consumer , > -.Fn membar_sync > -can all be called during autoconf, from process context, or from interrupt > context. > +.Fn membar_sync , > +.Fn membar_enter_after_atomic , > +.Fn membar_exit_before_atomic > +can all be called during autoconf, from process context, or from > +interrupt context. > .Sh HISTORY > The membar functions first appeared in > .Nx 5.0 >
