diff options
author | Ben Gamari <ben@smart-cactus.org> | 2019-10-20 00:14:13 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2022-11-16 21:33:51 -0500 |
commit | 56aca935379fb95b1a95a303c7254097627383ec (patch) | |
tree | ae823d2f5e9c834ef282ae095e6231c3c9f613c1 | |
parent | 556e7a74ee3d055fb545cfbc98adb7cf2a7e47fc (diff) | |
download | haskell-56aca935379fb95b1a95a303c7254097627383ec.tar.gz |
Fix Scav
-rw-r--r-- | rts/sm/GC.c | 2 | ||||
-rw-r--r-- | rts/sm/Scav.c | 40 |
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) { |