summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2019-10-20 00:14:13 -0400
committerBen Gamari <ben@smart-cactus.org>2022-11-16 21:33:51 -0500
commit56aca935379fb95b1a95a303c7254097627383ec (patch)
treeae823d2f5e9c834ef282ae095e6231c3c9f613c1
parent556e7a74ee3d055fb545cfbc98adb7cf2a7e47fc (diff)
downloadhaskell-56aca935379fb95b1a95a303c7254097627383ec.tar.gz
Fix Scav
-rw-r--r--rts/sm/GC.c2
-rw-r--r--rts/sm/Scav.c40
2 files changed, 42 insertions, 0 deletions
diff --git a/rts/sm/GC.c b/rts/sm/GC.c
index ffe3a47a07..70246b997e 100644
--- a/rts/sm/GC.c
+++ b/rts/sm/GC.c
@@ -1345,6 +1345,8 @@ void notifyTodoBlock(void) {
#endif
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
static void
scavenge_until_all_done (void)
{
diff --git a/rts/sm/Scav.c b/rts/sm/Scav.c
index be30e75b8f..8635e77442 100644
--- a/rts/sm/Scav.c
+++ b/rts/sm/Scav.c
@@ -94,6 +94,8 @@ static void scavenge_large_bitmap (StgPtr p,
# define scavenge_compact(str) scavenge_compact1(str)
#endif
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
static void do_evacuate(StgClosure **p, void *user STG_UNUSED)
{
evacuate(p);
@@ -103,6 +105,8 @@ static void do_evacuate(StgClosure **p, void *user STG_UNUSED)
Scavenge a TSO.
-------------------------------------------------------------------------- */
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
void
scavengeTSO (StgTSO *tso)
{
@@ -172,6 +176,8 @@ typedef struct {
HashTable *newHash;
} MapHashData;
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
static void
evacuate_hash_entry(MapHashData *dat, StgWord key, const void *value)
{
@@ -222,6 +228,8 @@ scavenge_compact(StgCompactNFData *str)
Mutable arrays of pointers
-------------------------------------------------------------------------- */
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
StgPtr scavenge_mut_arr_ptrs (StgMutArrPtrs *a)
{
W_ m;
@@ -264,6 +272,8 @@ StgPtr scavenge_mut_arr_ptrs (StgMutArrPtrs *a)
}
// scavenge only the marked areas of a MUT_ARR_PTRS
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
static StgPtr scavenge_mut_arr_ptrs_marked (StgMutArrPtrs *a)
{
W_ m;
@@ -293,6 +303,8 @@ static StgPtr scavenge_mut_arr_ptrs_marked (StgMutArrPtrs *a)
return (StgPtr)a + mut_arr_ptrs_sizeW(a);
}
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
STATIC_INLINE StgPtr
scavenge_small_bitmap (StgPtr p, StgWord size, StgWord bitmap)
{
@@ -312,6 +324,8 @@ scavenge_small_bitmap (StgPtr p, StgWord size, StgWord bitmap)
in PAPs.
-------------------------------------------------------------------------- */
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
STATIC_INLINE StgPtr
scavenge_arg_block (const StgFunInfoTable *fun_info, StgClosure **args)
{
@@ -340,6 +354,8 @@ scavenge_arg_block (const StgFunInfoTable *fun_info, StgClosure **args)
return p;
}
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
STATIC_INLINE GNUC_ATTR_HOT StgPtr
scavenge_PAP_payload (StgClosure *fun, StgClosure **payload, StgWord size)
{
@@ -373,6 +389,8 @@ scavenge_PAP_payload (StgClosure *fun, StgClosure **payload, StgWord size)
return p;
}
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
GNUC_ATTR_HOT StgPtr
scavenge_PAP (StgPAP *pap)
{
@@ -380,6 +398,8 @@ scavenge_PAP (StgPAP *pap)
return scavenge_PAP_payload (pap->fun, pap->payload, pap->n_args);
}
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
StgPtr
scavenge_AP (StgAP *ap)
{
@@ -398,6 +418,8 @@ scavenge_continuation(StgContinuation *cont)
Scavenge SRTs
-------------------------------------------------------------------------- */
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
GNUC_ATTR_HOT void
scavenge_thunk_srt(const StgInfoTable *info)
{
@@ -412,6 +434,8 @@ scavenge_thunk_srt(const StgInfoTable *info)
}
}
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
GNUC_ATTR_HOT void
scavenge_fun_srt(const StgInfoTable *info)
{
@@ -438,6 +462,8 @@ scavenge_fun_srt(const StgInfoTable *info)
idea.
-------------------------------------------------------------------------- */
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
static GNUC_ATTR_HOT void
scavenge_block (bdescr *bd)
{
@@ -891,6 +917,8 @@ scavenge_block (bdescr *bd)
doesn't need to advance the pointer on to the next object.
-------------------------------------------------------------------------- */
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
static void
scavenge_mark_stack(void)
{
@@ -1261,6 +1289,8 @@ scavenge_mark_stack(void)
objects can have this property.
-------------------------------------------------------------------------- */
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
static bool
scavenge_one(StgPtr p)
{
@@ -1618,6 +1648,8 @@ scavenge_one(StgPtr p)
remove non-mutable objects from the mutable list at this point.
-------------------------------------------------------------------------- */
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
static void
scavenge_mutable_list(bdescr *bd, generation *gen)
{
@@ -1756,6 +1788,8 @@ scavenge_capability_mut_lists (Capability *cap)
remove non-mutable objects from the mutable list at this point.
-------------------------------------------------------------------------- */
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
static void
scavenge_static(void)
{
@@ -1869,6 +1903,8 @@ scavenge_large_bitmap( StgPtr p, StgLargeBitmap *large_bitmap, StgWord size )
AP_STACK_UPDs, since these are just sections of copied stack.
-------------------------------------------------------------------------- */
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
void
scavenge_stack(StgPtr p, StgPtr stack_end)
{
@@ -2034,6 +2070,8 @@ scavenge_stack(StgPtr p, StgPtr stack_end)
be zero.
--------------------------------------------------------------------------- */
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
static void
scavenge_large (gen_workspace *ws)
{
@@ -2095,6 +2133,8 @@ scavenge_large (gen_workspace *ws)
is other work we can usefully be doing.
------------------------------------------------------------------------- */
+WARD_NEED(sharing_sm_lock)
+WARD_NEED(may_call_sm)
static bool
scavenge_find_work (void)
{