summaryrefslogtreecommitdiff
path: root/rts/sm
diff options
context:
space:
mode:
Diffstat (limited to 'rts/sm')
-rw-r--r--rts/sm/NonMovingMark.c20
-rw-r--r--rts/sm/NonMovingMark.h4
-rw-r--r--rts/sm/Storage.c18
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);
}
}