[Git][ghc/ghc][wip/tsan/codegen] 3 commits: compiler: Use release store in eager blackholing
Ben Gamari (@bgamari)
gitlab at gitlab.haskell.org
Tue Nov 15 21:10:31 UTC 2022
Ben Gamari pushed to branch wip/tsan/codegen at Glasgow Haskell Compiler / GHC
Commits:
3a64c9ac by Ben Gamari at 2022-11-15T16:10:26-05:00
compiler: Use release store in eager blackholing
- - - - -
1b049b0a by Ben Gamari at 2022-11-15T16:10:26-05:00
rts: Fix ordering of makeStableName
- - - - -
e7ac076a by Ben Gamari at 2022-11-15T16:10:26-05:00
rts: Use ordered accesses instead of explicit barriers
- - - - -
3 changed files:
- compiler/GHC/StgToCmm/Bind.hs
- rts/PrimOps.cmm
- rts/include/Cmm.h
Changes:
=====================================
compiler/GHC/StgToCmm/Bind.hs
=====================================
@@ -703,8 +703,8 @@ emitBlackHoleCode node = do
whenUpdRemSetEnabled $ emitUpdRemSetPushThunk node
emitStore (cmmOffsetW platform node (fixedHdrSizeW profile)) currentTSOExpr
-- See Note [Heap memory barriers] in SMP.h.
- emitPrimCall [] MO_WriteBarrier []
- emitStore node (CmmReg (CmmGlobal EagerBlackholeInfo))
+ let w = wordWidth platform
+ emitPrimCall [] (MO_AtomicWrite w MemOrderRelease) [node, CmmReg (CmmGlobal EagerBlockholeInfo)]
setupUpdate :: ClosureInfo -> LocalReg -> FCode () -> FCode ()
-- Nota Bene: this function does not change Node (even if it's a CAF),
=====================================
rts/PrimOps.cmm
=====================================
@@ -1728,7 +1728,7 @@ stg_takeMVarzh ( P_ mvar /* :: MVar a */ )
// Write barrier before we make the new MVAR_TSO_QUEUE
// visible to other cores.
// See Note [Heap memory barriers]
- prim_write_barrier;
+ RELEASE_FENCE;
if (StgMVar_head(mvar) == stg_END_TSO_QUEUE_closure) {
StgMVar_head(mvar) = q;
@@ -1895,7 +1895,7 @@ stg_putMVarzh ( P_ mvar, /* :: MVar a */
SET_HDR(q, stg_MVAR_TSO_QUEUE_info, CCS_SYSTEM);
// See Note [Heap memory barriers]
- prim_write_barrier;
+ RELEASE_FENCE;
if (StgMVar_head(mvar) == stg_END_TSO_QUEUE_closure) {
StgMVar_head(mvar) = q;
@@ -2104,7 +2104,7 @@ stg_readMVarzh ( P_ mvar, /* :: MVar a */ )
SET_HDR(q, stg_MVAR_TSO_QUEUE_info, CCS_SYSTEM);
// See Note [Heap memory barriers]
- prim_write_barrier;
+ RELEASE_FENCE;
StgTSO__link(CurrentTSO) = q;
StgTSO_block_info(CurrentTSO) = mvar;
@@ -2237,7 +2237,7 @@ stg_readIOPortzh ( P_ ioport /* :: IOPort a */ )
SET_HDR(q, stg_MVAR_TSO_QUEUE_info, CCS_SYSTEM);
// See Note [Heap memory barriers]
- prim_write_barrier;
+ RELEASE_FENCE;
StgMVar_head(ioport) = q;
StgTSO__link(CurrentTSO) = q;
@@ -2389,7 +2389,8 @@ stg_makeStableNamezh ( P_ obj )
/* Is there already a StableName for this heap object?
* stable_name_table is a pointer to an array of snEntry structs.
*/
- if ( snEntry_sn_obj(W_[stable_name_table] + index*SIZEOF_snEntry) == NULL ) {
+ sn_obj = %acquire snEntry_sn_obj(W_[stable_name_table] + index*SIZEOF_snEntry);
+ if (sn_obj == NULL) {
// At this point we have a snEntry, but it doesn't look as used to the
// GC yet because we don't have a StableName object for the sn_obj field
// (remember that sn_obj == NULL means the entry is free). So if we call
@@ -2406,10 +2407,7 @@ stg_makeStableNamezh ( P_ obj )
// This will make the StableName# object visible to other threads;
// be sure that its completely visible to other cores.
// See Note [Heap memory barriers] in SMP.h.
- prim_write_barrier;
- snEntry_sn_obj(W_[stable_name_table] + index*SIZEOF_snEntry) = sn_obj;
- } else {
- sn_obj = snEntry_sn_obj(W_[stable_name_table] + index*SIZEOF_snEntry);
+ %release snEntry_sn_obj(W_[stable_name_table] + index*SIZEOF_snEntry) = sn_obj;
}
return (sn_obj);
=====================================
rts/include/Cmm.h
=====================================
@@ -280,8 +280,7 @@
// "used".
#define LOAD_INFO_ACQUIRE(ret,x) \
- info = %INFO_PTR(UNTAG(x)); \
- prim_read_barrier;
+ info = %acquire StgHeader_info(UNTAG(x));
#define UNTAG_IF_PROF(x) UNTAG(x)
@@ -291,8 +290,7 @@
if (GETTAG(x) != 0) { \
ret(x); \
} \
- info = %INFO_PTR(x); \
- prim_read_barrier;
+ info = %acquire StgHeader_info(x);
#define UNTAG_IF_PROF(x) (x) /* already untagged */
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/46683a0f6025c67522900c5460f2eb7bb7c3fdcb...e7ac076ab11fc0304ff2c1bc3013068a2b13ed93
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/46683a0f6025c67522900c5460f2eb7bb7c3fdcb...e7ac076ab11fc0304ff2c1bc3013068a2b13ed93
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20221115/17c86366/attachment-0001.html>
More information about the ghc-commits
mailing list