diff options
Diffstat (limited to 'rts/sm')
-rw-r--r-- | rts/sm/NonMovingMark.c | 20 | ||||
-rw-r--r-- | rts/sm/NonMovingMark.h | 4 | ||||
-rw-r--r-- | rts/sm/Storage.c | 18 |
3 files changed, 16 insertions, 26 deletions
diff --git a/rts/sm/NonMovingMark.c b/rts/sm/NonMovingMark.c index 8990ff7412..8fab83a765 100644 --- a/rts/sm/NonMovingMark.c +++ b/rts/sm/NonMovingMark.c @@ -517,32 +517,24 @@ void updateRemembSetPushThunkEager(Capability *cap, } } -void updateRemembSetPushThunk_(StgRegTable *reg, StgThunk *origin) +void updateRemembSetPushThunk_(StgRegTable *reg, StgThunk *p) { // TODO: Eliminate this conditional once it's folded into codegen if (!nonmoving_write_barrier_enabled) return; - updateRemembSetPushThunk(regTableToCapability(reg), origin); + updateRemembSetPushThunk(regTableToCapability(reg), p); } -void updateRemembSetPushClosure(Capability *cap, - StgClosure *p, - StgClosure **origin) +void updateRemembSetPushClosure(Capability *cap, StgClosure *p) { if (!nonmoving_write_barrier_enabled) return; if (!check_in_nonmoving_heap(p)) return; MarkQueue *queue = &cap->upd_rem_set.queue; - // We only shortcut things living in the nonmoving heap. - if (! check_in_nonmoving_heap((StgClosure *) origin)) - origin = NULL; - - push_closure(queue, p, origin); + push_closure(queue, p, NULL); } -void updateRemembSetPushClosure_(StgRegTable *reg, - StgClosure *p, - StgClosure **origin) +void updateRemembSetPushClosure_(StgRegTable *reg, StgClosure *p) { - updateRemembSetPushClosure(regTableToCapability(reg), p, origin); + updateRemembSetPushClosure(regTableToCapability(reg), p); } STATIC_INLINE bool needs_upd_rem_set_mark(StgClosure *p) diff --git a/rts/sm/NonMovingMark.h b/rts/sm/NonMovingMark.h index 4dd4632c93..730c7e2fd0 100644 --- a/rts/sm/NonMovingMark.h +++ b/rts/sm/NonMovingMark.h @@ -127,8 +127,8 @@ void nonmovingMarkInitUpdRemSet(void); void init_upd_rem_set(UpdRemSet *rset); void reset_upd_rem_set(UpdRemSet *rset); -void updateRemembSetPushThunk(Capability *cap, StgThunk *origin); -void updateRemembSetPushThunk_(StgRegTable *reg, StgThunk *origin); +void updateRemembSetPushThunk(Capability *cap, StgThunk *p); +void updateRemembSetPushThunk_(StgRegTable *reg, StgThunk *p); void updateRemembSetPushTSO(Capability *cap, StgTSO *tso); void updateRemembSetPushStack(Capability *cap, StgStack *stack); // Debug only -- count number of blocks in global UpdRemSet diff --git a/rts/sm/Storage.c b/rts/sm/Storage.c index dd253ade57..6fa6d777a8 100644 --- a/rts/sm/Storage.c +++ b/rts/sm/Storage.c @@ -433,7 +433,7 @@ lockCAF (StgRegTable *reg, StgIndStatic *caf) if (nonmoving_write_barrier_enabled) { StgThunkInfoTable *thunk_info = itbl_to_thunk_itbl(orig_info_tbl); if (thunk_info->i.srt) { - updateRemembSetPushClosure(cap, GET_SRT(thunk_info), NULL); + updateRemembSetPushClosure(cap, GET_SRT(thunk_info)); } } @@ -1141,9 +1141,7 @@ dirty_MUT_VAR(StgRegTable *reg, StgMutVar *mvar, StgClosure *old) mvar->header.info = &stg_MUT_VAR_DIRTY_info; recordClosureMutated(cap, (StgClosure *) mvar); if (nonmoving_write_barrier_enabled != 0) { - updateRemembSetPushClosure_(reg, - old, - &mvar->var); + updateRemembSetPushClosure_(reg, old); } } } @@ -1162,7 +1160,7 @@ dirty_TVAR(Capability *cap, StgTVar *p, p->header.info = &stg_TVAR_DIRTY_info; recordClosureMutated(cap,(StgClosure*)p); if (nonmoving_write_barrier_enabled != 0) { - updateRemembSetPushClosure(cap, old, NULL); + updateRemembSetPushClosure(cap, old); } } } @@ -1179,7 +1177,7 @@ setTSOLink (Capability *cap, StgTSO *tso, StgTSO *target) tso->dirty = 1; recordClosureMutated(cap,(StgClosure*)tso); if (nonmoving_write_barrier_enabled) - updateRemembSetPushClosure(cap, (StgClosure *) tso->_link, NULL); + updateRemembSetPushClosure(cap, (StgClosure *) tso->_link); } tso->_link = target; } @@ -1191,7 +1189,7 @@ setTSOPrev (Capability *cap, StgTSO *tso, StgTSO *target) tso->dirty = 1; recordClosureMutated(cap,(StgClosure*)tso); if (nonmoving_write_barrier_enabled) - updateRemembSetPushClosure(cap, (StgClosure *) tso->block_info.prev, NULL); + updateRemembSetPushClosure(cap, (StgClosure *) tso->block_info.prev); } tso->block_info.prev = target; } @@ -1240,9 +1238,9 @@ update_MVAR(StgRegTable *reg, StgClosure *p, StgClosure *old_val) Capability *cap = regTableToCapability(reg); if (nonmoving_write_barrier_enabled) { StgMVar *mvar = (StgMVar *) p; - updateRemembSetPushClosure(cap, old_val, NULL); - updateRemembSetPushClosure(cap, (StgClosure *) mvar->head, NULL); - updateRemembSetPushClosure(cap, (StgClosure *) mvar->tail, NULL); + updateRemembSetPushClosure(cap, old_val); + updateRemembSetPushClosure(cap, (StgClosure *) mvar->head); + updateRemembSetPushClosure(cap, (StgClosure *) mvar->tail); } } |