Up to [cvs.NetBSD.org] / src / common / lib / libc / arch / sparc64 / atomic
Request diff between arbitrary revisions
Default branch: MAIN
Revision 1.9 / (download) - annotate - [select for diffs], Sat Apr 9 23:32:52 2022 UTC (9 months, 3 weeks ago) by riastradh
CVS Tags: netbsd-10-base, netbsd-10, HEAD
Changes since 1.8: +17 -9 lines
Diff to previous 1.8 (colored)
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.8 / (download) - annotate - [select for diffs], Sat Apr 9 22:53:25 2022 UTC (9 months, 3 weeks ago) by riastradh
Changes since 1.7: +6 -5 lines
Diff to previous 1.7 (colored)
sparc64/membar_ops: Upgrade membar_enter from R/RW to RW/RW. This will be deprecated soon but let's avoid leaving rakes to trip on with it arising from disagreement over the documentation (W/RW) and implementation and usage (R/RW).
Revision 1.7 / (download) - annotate - [select for diffs], Sat Apr 9 12:06:47 2022 UTC (9 months, 3 weeks ago) by riastradh
Changes since 1.6: +34 -8 lines
Diff to previous 1.6 (colored)
sparc64: Fix membar_sync by issuing membar #StoreLoad. In TSO this is the only memory barrier ever needed, and somehow we got this wrong and instead issued an unnecessary membar #LoadLoad -- not needed even in PSO let alone in TSO. XXX Apparently we may run userland programs with PSO or RMO, in which case all of these membars need fixing: PSO RMO membar_consumer nop membar #LoadLoad membar_producer membar #StoreStore membar #StoreStore membar_enter nop membar #LoadLoad|LoadStore membar_exit membar #StoreStore membar #LoadStore|StoreStore membar_sync membar #StoreLoad|StoreStore membar #...everything... But at least this fixes the TSO case in which we run the kernel. Also I'm not sure there's any non-TSO hardware out there in practice.
Revision 1.6 / (download) - annotate - [select for diffs], Wed Apr 6 22:47:57 2022 UTC (9 months, 4 weeks ago) by riastradh
Changes since 1.5: +2 -2 lines
Diff to previous 1.5 (colored)
Nix trailing whitespace in files of membars, atomics, and lock stubs. Will be touching many of these files soon for functional changes. No functional change intended.
Revision 184.108.40.206 / (download) - annotate - [select for diffs], Tue Apr 21 19:37:47 2020 UTC (2 years, 9 months ago) by martin
Changes since 220.127.116.11: +0 -0 lines
Diff to previous 18.104.22.168 (colored) to branchpoint 1.5 (colored) next main 1.6 (colored)
Ooops, restore accidently removed files from merge mishap
Revision 22.214.171.124, Tue Apr 21 18:41:21 2020 UTC (2 years, 9 months ago) by martin
Changes since 1.5: +1 -1 lines
Sync with HEAD
Revision 126.96.36.199 / (download) - annotate - [select for diffs], Mon Jun 23 04:26:45 2008 UTC (14 years, 7 months ago) by wrstuden
Changes since 1.4: +3 -3 lines
Diff to previous 1.4 (colored) next main 1.5 (colored)
Sync w/ -current. 34 merge conflicts to follow.
Revision 188.8.131.52 / (download) - annotate - [select for diffs], Wed Jun 4 02:02:58 2008 UTC (14 years, 8 months ago) by yamt
Changes since 184.108.40.206: +3 -3 lines
Diff to previous 220.127.116.11 (colored) to branchpoint 1.3 (colored) next main 1.4 (colored)
sync with head
Revision 1.5 / (download) - annotate - [select for diffs], Sun May 25 15:56:12 2008 UTC (14 years, 8 months ago) by chs
CVS Tags: yamt-pf42-base4, yamt-pf42-base3, yamt-pagecache-tag8, yamt-pagecache-base9, yamt-pagecache-base8, yamt-pagecache-base7, yamt-pagecache-base6, yamt-pagecache-base5, yamt-pagecache-base4, yamt-pagecache-base3, yamt-pagecache-base2, yamt-pagecache-base, yamt-pagecache, yamt-nfs-mp-base9, yamt-nfs-mp-base8, yamt-nfs-mp-base7, yamt-nfs-mp-base6, yamt-nfs-mp-base5, yamt-nfs-mp-base4, yamt-nfs-mp-base3, yamt-nfs-mp-base11, yamt-nfs-mp-base10, wrstuden-revivesa-base-3, wrstuden-revivesa-base-2, wrstuden-revivesa-base-1, wrstuden-revivesa-base, tls-maxphys-base, tls-maxphys-20171202, tls-maxphys, tls-earlyentropy-base, tls-earlyentropy, rmind-uvmplock-base, 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, 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-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-2-RELEASE, netbsd-8-1-RELEASE, netbsd-8-1-RC1, netbsd-8-0-RELEASE, netbsd-8-0-RC2, netbsd-8-0-RC1, netbsd-8, 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, 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, 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-nb8-mediatek-base, matt-nb8-mediatek, matt-nb6-plus-nbase, matt-nb6-plus-base, matt-nb6-plus, matt-nb5-pq3-base, matt-nb5-pq3, matt-nb5-mips64-u2-k2-k4-k7-k8-k9, matt-nb5-mips64-u1-k1-k5, matt-nb5-mips64-premerge-20101231, matt-nb5-mips64-premerge-20091211, matt-nb5-mips64-k15, matt-nb5-mips64, matt-nb4-mips64-k7-u2a-k9b, matt-mips64-premerge-20101231, matt-mips64-base2, localcount-20160914, khorben-n900, jymxensuspend-base, jym-xensuspend-nbase, jym-xensuspend-base, jym-xensuspend, is-mlppp-base, is-mlppp, cjep_sun2x-base1, cjep_sun2x-base, cjep_sun2x, cjep_staticlib_x-base1, cjep_staticlib_x-base, cjep_staticlib_x, cherry-xenmp-base, cherry-xenmp, bouyer-xenpvh-base2, bouyer-xenpvh-base1, bouyer-xenpvh-base, bouyer-xenpvh, bouyer-socketcan-base1, bouyer-socketcan-base, bouyer-socketcan, bouyer-quota2-nbase, bouyer-quota2-base, bouyer-quota2, agc-symver-base, agc-symver, ad-namecache-base3, ad-namecache-base, ad-namecache
Branch point for: phil-wifi
Changes since 1.4: +3 -3 lines
Diff to previous 1.4 (colored)
enable profiling of assembly functions.
Revision 18.104.22.168 / (download) - annotate - [select for diffs], Sun May 18 12:28:46 2008 UTC (14 years, 8 months ago) by yamt
Changes since 1.3: +1 -8 lines
Diff to previous 1.3 (colored)
sync with head.
Revision 1.4 / (download) - annotate - [select for diffs], Mon Apr 28 20:22:52 2008 UTC (14 years, 9 months ago) by martin
CVS Tags: yamt-pf42-base2, yamt-nfs-mp-base2, hpcarm-cleanup-nbase
Branch point for: wrstuden-revivesa
Changes since 1.3: +1 -8 lines
Diff to previous 1.3 (colored)
Remove clause 3 and 4 from TNF licenses
Revision 22.214.171.124 / (download) - annotate - [select for diffs], Sun Mar 23 00:12:43 2008 UTC (14 years, 10 months ago) by matt
Changes since 126.96.36.199: +3 -2 lines
Diff to previous 188.8.131.52 (colored) to branchpoint 1.2 (colored) next main 1.3 (colored)
sync with HEAD
Revision 1.3 / (download) - annotate - [select for diffs], Sat Jan 12 17:27:28 2008 UTC (15 years ago) by ad
CVS Tags: yamt-pf42-baseX, yamt-pf42-base, yamt-nfs-mp-base, yamt-lazymbuf-base15, yamt-lazymbuf-base14, matt-armv6-nbase, keiichi-mipv6-base, keiichi-mipv6, hpcarm-cleanup-base
Branch point for: yamt-pf42
Changes since 1.2: +3 -2 lines
Diff to previous 1.2 (colored)
Don't put membar in the delay slot. thorpej@ says it may be problematic.
Revision 184.108.40.206 / (download) - annotate - [select for diffs], Wed Jan 9 01:21:14 2008 UTC (15 years, 1 month ago) by matt
Changes since 220.127.116.11: +60 -0 lines
Diff to previous 18.104.22.168 (colored) to branchpoint 1.2 (colored)
sync with HEAD
Revision 22.214.171.124, Thu Nov 29 02:16:00 2007 UTC (15 years, 2 months ago) by matt
Changes since 1.2: +0 -60 lines
file membar_ops.S was added on branch matt-armv6 on 2008-01-09 01:21:13 +0000
Revision 1.2 / (download) - annotate - [select for diffs], Thu Nov 29 02:16:00 2007 UTC (15 years, 2 months ago) by ad
CVS Tags: yamt-kmem-base3, yamt-kmem-base2, yamt-kmem-base, reinoud-bufcleanup-nbase, reinoud-bufcleanup-base, matt-armv6-base, cube-autoconf-base, cube-autoconf
Branch point for: matt-armv6
Changes since 1.1: +2 -2 lines
Diff to previous 1.1 (colored)
Fix the aliases.
Revision 1.1 / (download) - annotate - [select for diffs], Wed Nov 28 17:29:13 2007 UTC (15 years, 2 months ago) by ad
Memory barriers for sparc64. XXX Can the 'membar' go in retl delay slot?
This form allows you to request diff's between any two revisions of a file. You may select a symbolic revision name using the selection box or you may type in a numeric name using the type-in text box.