CVS log for src/common/lib/libc/arch/mips/atomic/membar_ops.S
Up to [cvs.NetBSD.org] / src / common / lib / libc / arch / mips / atomic
Request diff between arbitrary revisions
Keyword substitution: kv
Default branch: MAIN
Revision 1.13: download - view: text, markup, annotated - select for diffs
Thu Apr 21 12:06:31 2022 UTC (2 years, 7 months ago) by riastradh
Branches: MAIN
CVS tags: thorpej-ifq-base,
thorpej-ifq,
thorpej-altq-separation-base,
thorpej-altq-separation,
perseant-exfatfs-base-20240630,
perseant-exfatfs-base,
perseant-exfatfs,
netbsd-10-base,
netbsd-10-0-RELEASE,
netbsd-10-0-RC6,
netbsd-10-0-RC5,
netbsd-10-0-RC4,
netbsd-10-0-RC3,
netbsd-10-0-RC2,
netbsd-10-0-RC1,
netbsd-10,
HEAD
Diff to: previous 1.12: preferred, colored
Changes since revision 1.12: +66 -30
lines
mips/cavium: Take advantage of Octeon's guaranteed r/rw ordering.
Revision 1.12: download - view: text, markup, annotated - select for diffs
Sat Apr 9 23:32:51 2022 UTC (2 years, 7 months ago) by riastradh
Branches: MAIN
Diff to: previous 1.11: preferred, colored
Changes since revision 1.11: +24 -6
lines
Introduce membar_acquire/release. Deprecate membar_enter/exit.
The names membar_enter/exit were unclear, and the documentation of
membar_enter has disagreed with the implementations on sparc,
powerpc, and even x86(!) for the entire time it has been in NetBSD.
The terms `acquire' and `release' are ubiquitous in the literature
today, and have been adopted in the C and C++ standards to mean
load-before-load/store and load/store-before-store, respectively,
which are exactly the orderings required by acquiring and releasing a
mutex, as well as other useful applications like decrementing a
reference count and then freeing the underlying object if it went to
zero.
Originally I proposed changing one word in the documentation for
membar_enter to make it load-before-load/store instead of
store-before-load/store, i.e., to make it an acquire barrier. I
proposed this on the grounds that
(a) all implementations guarantee load-before-load/store,
(b) some implementations fail to guarantee store-before-load/store,
and
(c) all uses in-tree assume load-before-load/store.
I verified parts (a) and (b) (except, for (a), powerpc didn't even
guarantee load-before-load/store -- isync isn't necessarily enough;
need lwsync in general -- but it _almost_ did, and it certainly didn't
guarantee store-before-load/store).
Part (c) might not be correct, however: under the mistaken assumption
that atomic-r/m/w then membar-w/rw is equivalent to atomic-r/m/w then
membar-r/rw, I only audited the cases of membar_enter that _aren't_
immediately after an atomic-r/m/w. All of those cases assume
load-before-load/store. But my assumption was wrong -- there are
cases of atomic-r/m/w then membar-w/rw that would be broken by
changing to atomic-r/m/w then membar-r/rw:
https://mail-index.netbsd.org/tech-kern/2022/03/29/msg028044.html
Furthermore, the name membar_enter has been adopted in other places
like OpenBSD where it actually does follow the documentation and
guarantee store-before-load/store, even if that order is not useful.
So the name membar_enter currently lives in a bad place where it
means either of two things -- r/rw or w/rw.
With this change, we deprecate membar_enter/exit, introduce
membar_acquire/release as better names for the useful pair (r/rw and
rw/w), and make sure the implementation of membar_enter guarantees
both what was documented _and_ what was implemented, making it an
alias for membar_sync.
While here, rework all of the membar_* definitions and aliases. The
new logic follows a rule to make it easier to audit:
membar_X is defined as an alias for membar_Y iff membar_X is
guaranteed by membar_Y.
The `no stronger than' relation is (the transitive closure of):
- membar_consumer (r/r) is guaranteed by membar_acquire (r/rw)
- membar_producer (w/w) is guaranteed by membar_release (rw/w)
- membar_acquire (r/rw) is guaranteed by membar_sync (rw/rw)
- membar_release (rw/w) is guaranteed by membar_sync (rw/rw)
And, for the deprecated membars:
- membar_enter (whether r/rw, w/rw, or rw/rw) is guaranteed by
membar_sync (rw/rw)
- membar_exit (rw/w) is guaranteed by membar_release (rw/w)
(membar_exit is identical to membar_release, but the name is
deprecated.)
Finally, while here, annotate some of the instructions with their
semantics. For powerpc, leave an essay with citations on the
unfortunate but -- as far as I can tell -- necessary decision to use
lwsync, not isync, for membar_acquire and membar_consumer.
Also add membar(3) and atomic(3) man page links.
Revision 1.11: download - view: text, markup, annotated - select for diffs
Sat Feb 12 17:10:02 2022 UTC (2 years, 9 months ago) by riastradh
Branches: MAIN
Diff to: previous 1.10: preferred, colored
Changes since revision 1.10: +1 -11
lines
mips: Brush up __cpu_simple_lock.
- Eradicate last vestiges of mb_* barriers.
- In __cpu_simple_lock_init, omit needless barrier. It is the
caller's responsibility to ensure __cpu_simple_lock_init happens
before other operations on it anyway, so there was never any need
for a barrier here.
- In __cpu_simple_lock_try, leave comments about memory ordering
guarantees of the kernel's _atomic_cas_uint, which are inexplicably
different from the non-underscored atomic_cas_uint.
- In __cpu_simple_unlock, use membar_exit instead of mb_memory, and do
it unconditionally.
This ensures that in __cpu_simple_lock/.../__cpu_simple_unlock, all
memory operations in the ellipsis happen before the store that
releases the lock.
- On Octeon, the barrier was omitted altogether, which is a bug --
it needs to be there or else there is no happens-before relation
and whoever takes the lock next might see stale values stored or
even stomp over the unlocking CPU's delayed loads.
- On non-Octeon, the mb_memory was sync. Using membar_exit
preserves this.
XXX On Octeon, membar_exit only issues syncw -- this seems wrong,
only store-before-store and not load/store-before-store, unless the
CNMIPS architecture guarantees it is sufficient here like
SPARCv8/v9 PSO (`Partial Store Order').
- Leave an essay with citations about why we have an apparently
pointless syncw _after_ releasing a lock, to work around a design
bug^W^Wquirk in cnmips which sometimes buffers stores for hundreds
of thousands of cycles for fun unless you issue syncw.
Revision 1.10: download - view: text, markup, annotated - select for diffs
Mon Aug 10 14:37:38 2020 UTC (4 years, 3 months ago) by skrll
Branches: MAIN
CVS tags: cjep_sun2x-base1,
cjep_sun2x-base,
cjep_sun2x,
cjep_staticlib_x-base1,
cjep_staticlib_x-base,
cjep_staticlib_x
Diff to: previous 1.9: preferred, colored
Changes since revision 1.9: +2 -9
lines
More SYNC centralisation
Revision 1.9: download - view: text, markup, annotated - select for diffs
Sat Aug 1 09:26:49 2020 UTC (4 years, 4 months ago) by skrll
Branches: MAIN
Diff to: previous 1.8: preferred, colored
Changes since revision 1.8: +2 -2
lines
Trailing whitespace
Revision 1.8.16.2: download - view: text, markup, annotated - select for diffs
Tue Apr 21 19:37:44 2020 UTC (4 years, 7 months ago) by martin
Branches: phil-wifi
Diff to: previous 1.8.16.1: preferred, colored; branchpoint 1.8: preferred, colored; next MAIN 1.9: preferred, colored
Changes since revision 1.8.16.1: +0 -0
lines
Ooops, restore accidently removed files from merge mishap
Revision 1.8.16.1
Tue Apr 21 18:41:18 2020 UTC (4 years, 7 months ago) by martin
Branches: phil-wifi
FILE REMOVED
Changes since revision 1.8: +1 -1
lines
Sync with HEAD
Revision 1.8: download - view: text, markup, annotated - select for diffs
Tue Jun 23 20:56:17 2015 UTC (9 years, 5 months ago) by matt
Branches: MAIN
CVS tags: tls-maxphys-20171202,
prg-localcount2-base3,
prg-localcount2-base2,
prg-localcount2-base1,
prg-localcount2-base,
prg-localcount2,
phil-wifi-base,
phil-wifi-20200421,
phil-wifi-20200411,
phil-wifi-20200406,
phil-wifi-20191119,
phil-wifi-20190609,
pgoyette-localcount-base,
pgoyette-localcount-20170426,
pgoyette-localcount-20170320,
pgoyette-localcount-20170107,
pgoyette-localcount-20161104,
pgoyette-localcount-20160806,
pgoyette-localcount-20160726,
pgoyette-localcount,
pgoyette-compat-merge-20190127,
pgoyette-compat-base,
pgoyette-compat-20190127,
pgoyette-compat-20190118,
pgoyette-compat-1226,
pgoyette-compat-1126,
pgoyette-compat-1020,
pgoyette-compat-0930,
pgoyette-compat-0906,
pgoyette-compat-0728,
pgoyette-compat-0625,
pgoyette-compat-0521,
pgoyette-compat-0502,
pgoyette-compat-0422,
pgoyette-compat-0415,
pgoyette-compat-0407,
pgoyette-compat-0330,
pgoyette-compat-0322,
pgoyette-compat-0315,
pgoyette-compat,
perseant-stdc-iso10646-base,
perseant-stdc-iso10646,
netbsd-9-base,
netbsd-9-4-RELEASE,
netbsd-9-3-RELEASE,
netbsd-9-2-RELEASE,
netbsd-9-1-RELEASE,
netbsd-9-0-RELEASE,
netbsd-9-0-RC2,
netbsd-9-0-RC1,
netbsd-9,
netbsd-8-base,
netbsd-8-3-RELEASE,
netbsd-8-2-RELEASE,
netbsd-8-1-RELEASE,
netbsd-8-1-RC1,
netbsd-8-0-RELEASE,
netbsd-8-0-RC2,
netbsd-8-0-RC1,
netbsd-8,
matt-nb8-mediatek-base,
matt-nb8-mediatek,
localcount-20160914,
is-mlppp-base,
is-mlppp,
bouyer-xenpvh-base2,
bouyer-xenpvh-base1,
bouyer-xenpvh-base,
bouyer-xenpvh,
bouyer-socketcan-base1,
bouyer-socketcan-base,
bouyer-socketcan,
ad-namecache-base3,
ad-namecache-base,
ad-namecache
Branch point for: phil-wifi
Diff to: previous 1.7: preferred, colored
Changes since revision 1.7: +6 -20
lines
Always use sync if mips3 or later or not using O32 ABI. (A little redundant
since not using O32 means you are using mips3 or later.)
Revision 1.7: download - view: text, markup, annotated - select for diffs
Mon Jun 22 06:06:02 2015 UTC (9 years, 5 months ago) by matt
Branches: MAIN
Diff to: previous 1.6: preferred, colored
Changes since revision 1.6: +3 -4
lines
#include "assym.h"
Don't include "assym.h" with _RUMPKERNEL defined.
Revision 1.6: download - view: text, markup, annotated - select for diffs
Mon Jun 1 23:16:54 2015 UTC (9 years, 6 months ago) by matt
Branches: MAIN
Diff to: previous 1.5: preferred, colored
Changes since revision 1.5: +18 -1
lines
Include OCTEON support for syncw and saa/saad (Store Atomic Add).
Revision 1.4.6.1: download - view: text, markup, annotated - select for diffs
Tue Oct 30 18:46:13 2012 UTC (12 years, 1 month ago) by yamt
Branches: yamt-pagecache
CVS tags: yamt-pagecache-tag8
Diff to: previous 1.4: preferred, colored; next MAIN 1.5: preferred, colored
Changes since revision 1.4: +4 -3
lines
sync with head
Revision 1.5: download - view: text, markup, annotated - select for diffs
Fri Aug 3 06:06:44 2012 UTC (12 years, 4 months ago) by matt
Branches: MAIN
CVS tags: yamt-pagecache-base9,
yamt-pagecache-base8,
yamt-pagecache-base7,
yamt-pagecache-base6,
tls-maxphys-base,
tls-maxphys,
tls-earlyentropy-base,
tls-earlyentropy,
rmind-smpnet-nbase,
rmind-smpnet-base,
riastradh-xf86-video-intel-2-7-1-pre-2-21-15,
riastradh-drm2-base3,
riastradh-drm2-base2,
riastradh-drm2-base1,
riastradh-drm2-base,
riastradh-drm2,
netbsd-7-nhusb-base-20170116,
netbsd-7-nhusb-base,
netbsd-7-nhusb,
netbsd-7-base,
netbsd-7-2-RELEASE,
netbsd-7-1-RELEASE,
netbsd-7-1-RC2,
netbsd-7-1-RC1,
netbsd-7-1-2-RELEASE,
netbsd-7-1-1-RELEASE,
netbsd-7-1,
netbsd-7-0-RELEASE,
netbsd-7-0-RC3,
netbsd-7-0-RC2,
netbsd-7-0-RC1,
netbsd-7-0-2-RELEASE,
netbsd-7-0-1-RELEASE,
netbsd-7-0,
netbsd-7,
khorben-n900,
agc-symver-base,
agc-symver
Diff to: previous 1.4: preferred, colored
Changes since revision 1.4: +4 -3
lines
Add a missing .set noreorder
Revision 1.3.10.3: download - view: text, markup, annotated - select for diffs
Fri Aug 3 05:35:13 2012 UTC (12 years, 4 months ago) by matt
Branches: matt-nb5-mips64
Diff to: previous 1.3.10.2: preferred, colored; branchpoint 1.3: preferred, colored; next MAIN 1.4: preferred, colored
Changes since revision 1.3.10.2: +2 -1
lines
Add missing .set noreorder
Revision 1.4: download - view: text, markup, annotated - select for diffs
Mon Dec 14 00:39:00 2009 UTC (14 years, 11 months ago) by matt
Branches: MAIN
CVS tags: yamt-pagecache-base5,
yamt-pagecache-base4,
yamt-pagecache-base3,
yamt-pagecache-base2,
yamt-pagecache-base,
yamt-nfs-mp-base9,
yamt-nfs-mp-base11,
yamt-nfs-mp-base10,
rmind-uvmplock-base,
netbsd-6-base,
netbsd-6-1-RELEASE,
netbsd-6-1-RC4,
netbsd-6-1-RC3,
netbsd-6-1-RC2,
netbsd-6-1-RC1,
netbsd-6-1-5-RELEASE,
netbsd-6-1-4-RELEASE,
netbsd-6-1-3-RELEASE,
netbsd-6-1-2-RELEASE,
netbsd-6-1-1-RELEASE,
netbsd-6-1,
netbsd-6-0-RELEASE,
netbsd-6-0-RC2,
netbsd-6-0-RC1,
netbsd-6-0-6-RELEASE,
netbsd-6-0-5-RELEASE,
netbsd-6-0-4-RELEASE,
netbsd-6-0-3-RELEASE,
netbsd-6-0-2-RELEASE,
netbsd-6-0-1-RELEASE,
netbsd-6-0,
netbsd-6,
matt-nb6-plus-nbase,
matt-nb6-plus-base,
matt-nb6-plus,
matt-mips64-premerge-20101231,
cherry-xenmp-base,
cherry-xenmp,
bouyer-quota2-nbase,
bouyer-quota2-base,
bouyer-quota2
Branch point for: yamt-pagecache
Diff to: previous 1.3: preferred, colored
Changes since revision 1.3: +17 -10
lines
Merge from matt-nb5-mips64
Revision 1.3.10.2: download - view: text, markup, annotated - select for diffs
Sat Sep 5 18:52:32 2009 UTC (15 years, 3 months ago) by matt
Branches: matt-nb5-mips64
CVS tags: matt-nb5-mips64-u2-k2-k4-k7-k8-k9,
matt-nb5-mips64-premerge-20101231,
matt-nb5-mips64-premerge-20091211,
matt-nb5-mips64-k15,
matt-nb4-mips64-k7-u2a-k9b
Diff to: previous 1.3.10.1: preferred, colored; branchpoint 1.3: preferred, colored
Changes since revision 1.3.10.1: +11 -4
lines
Resolve some conflicts.
Revision 1.3.10.1: download - view: text, markup, annotated - select for diffs
Sat Sep 5 04:03:01 2009 UTC (15 years, 3 months ago) by matt
Branches: matt-nb5-mips64
Diff to: previous 1.3: preferred, colored
Changes since revision 1.3: +9 -9
lines
Only allow to null on o32
Revision 1.2.2.1: download - view: text, markup, annotated - select for diffs
Mon Jun 23 04:26:45 2008 UTC (16 years, 5 months ago) by wrstuden
Branches: wrstuden-revivesa
Diff to: previous 1.2: preferred, colored; next MAIN 1.3: preferred, colored
Changes since revision 1.2: +2 -2
lines
Sync w/ -current. 34 merge conflicts to follow.
Revision 1.1.8.2: download - view: text, markup, annotated - select for diffs
Wed Jun 4 02:02:58 2008 UTC (16 years, 6 months ago) by yamt
Branches: yamt-pf42
Diff to: previous 1.1.8.1: preferred, colored; branchpoint 1.1: preferred, colored; next MAIN 1.2: preferred, colored
Changes since revision 1.1.8.1: +2 -2
lines
sync with head
Revision 1.3: download - view: text, markup, annotated - select for diffs
Sun May 25 15:56:12 2008 UTC (16 years, 6 months ago) by chs
Branches: MAIN
CVS tags: yamt-pf42-base4,
yamt-pf42-base3,
yamt-nfs-mp-base8,
yamt-nfs-mp-base7,
yamt-nfs-mp-base6,
yamt-nfs-mp-base5,
yamt-nfs-mp-base4,
yamt-nfs-mp-base3,
wrstuden-revivesa-base-3,
wrstuden-revivesa-base-2,
wrstuden-revivesa-base-1,
wrstuden-revivesa-base,
netbsd-5-base,
netbsd-5-2-RELEASE,
netbsd-5-2-RC1,
netbsd-5-2-3-RELEASE,
netbsd-5-2-2-RELEASE,
netbsd-5-2-1-RELEASE,
netbsd-5-2,
netbsd-5-1-RELEASE,
netbsd-5-1-RC4,
netbsd-5-1-RC3,
netbsd-5-1-RC2,
netbsd-5-1-RC1,
netbsd-5-1-5-RELEASE,
netbsd-5-1-4-RELEASE,
netbsd-5-1-3-RELEASE,
netbsd-5-1-2-RELEASE,
netbsd-5-1-1-RELEASE,
netbsd-5-1,
netbsd-5-0-RELEASE,
netbsd-5-0-RC4,
netbsd-5-0-RC3,
netbsd-5-0-RC2,
netbsd-5-0-RC1,
netbsd-5-0-2-RELEASE,
netbsd-5-0-1-RELEASE,
netbsd-5-0,
netbsd-5,
matt-premerge-20091211,
matt-nb5-pq3-base,
matt-nb5-pq3,
matt-nb5-mips64-u1-k1-k5,
matt-mips64-base2,
jymxensuspend-base,
jym-xensuspend-nbase,
jym-xensuspend-base,
jym-xensuspend
Branch point for: matt-nb5-mips64
Diff to: previous 1.2: preferred, colored
Changes since revision 1.2: +2 -2
lines
enable profiling of assembly functions.
Revision 1.1.8.1: download - view: text, markup, annotated - select for diffs
Sun May 18 12:28:45 2008 UTC (16 years, 6 months ago) by yamt
Branches: yamt-pf42
Diff to: previous 1.1: preferred, colored
Changes since revision 1.1: +1 -8
lines
sync with head.
Revision 1.2: download - view: text, markup, annotated - select for diffs
Mon Apr 28 20:22:52 2008 UTC (16 years, 7 months ago) by martin
Branches: MAIN
CVS tags: yamt-pf42-base2,
yamt-nfs-mp-base2,
hpcarm-cleanup-nbase
Branch point for: wrstuden-revivesa
Diff to: previous 1.1: preferred, colored
Changes since revision 1.1: +1 -8
lines
Remove clause 3 and 4 from TNF licenses
Revision 1.1.4.2: download - view: text, markup, annotated - select for diffs
Wed Jan 9 01:20:59 2008 UTC (16 years, 11 months ago) by matt
Branches: matt-armv6
Diff to: previous 1.1.4.1: preferred, colored; branchpoint 1.1: preferred, colored; next MAIN 1.2: preferred, colored
Changes since revision 1.1.4.1: +77 -0
lines
sync with HEAD
Revision 1.1.4.1
Fri Nov 30 22:50:44 2007 UTC (17 years ago) by matt
Branches: matt-armv6
FILE REMOVED
Changes since revision 1.1: +0 -77
lines
file membar_ops.S was added on branch matt-armv6 on 2008-01-09 01:20:59 +0000
Revision 1.1: download - view: text, markup, annotated - select for diffs
Fri Nov 30 22:50:44 2007 UTC (17 years ago) by ad
Branches: MAIN
CVS tags: yamt-pf42-baseX,
yamt-pf42-base,
yamt-nfs-mp-base,
yamt-lazymbuf-base15,
yamt-lazymbuf-base14,
yamt-kmem-base3,
yamt-kmem-base2,
yamt-kmem-base,
reinoud-bufcleanup-nbase,
reinoud-bufcleanup-base,
matt-armv6-nbase,
matt-armv6-base,
keiichi-mipv6-base,
keiichi-mipv6,
hpcarm-cleanup-base,
cube-autoconf-base,
cube-autoconf
Branch point for: yamt-pf42,
matt-armv6
Memory barriers for MIPS.
CVSweb <webmaster@jp.NetBSD.org>