X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FStorage.h;h=8927ed69b067ea9170745d7e62469ee6cf8e70b5;hb=26f4bfc82f2b2359259578e9c54d476fc2de650f;hp=573d6bcd5b97b9646131d66eb842116ffe99cfe5;hpb=254528e32a007e508bb5967948ba02aa15c7e482;p=ghc-hetmet.git diff --git a/rts/sm/Storage.h b/rts/sm/Storage.h index 573d6bc..8927ed6 100644 --- a/rts/sm/Storage.h +++ b/rts/sm/Storage.h @@ -9,7 +9,9 @@ #ifndef SM_STORAGE_H #define SM_STORAGE_H -#pragma GCC visibility push(hidden) +#include "Capability.h" + +#include "BeginPrivate.h" /* ----------------------------------------------------------------------------- Initialisation / De-initialisation @@ -17,18 +19,17 @@ void initStorage(void); void exitStorage(void); -void freeStorage(void); +void freeStorage(rtsBool free_heap); /* ----------------------------------------------------------------------------- Storage manager state -------------------------------------------------------------------------- */ -extern bdescr * pinned_object_block; - INLINE_HEADER rtsBool -doYouWantToGC( void ) +doYouWantToGC( Capability *cap ) { - return (alloc_blocks >= alloc_blocks_lim); + return (cap->r.rCurrentNursery->link == NULL || + g0->n_new_large_words >= large_alloc_lim); } /* for splitting blocks groups in two */ @@ -37,11 +38,6 @@ bdescr * splitLargeBlock (bdescr *bd, nat blocks); /* ----------------------------------------------------------------------------- Generational garbage collection support - recordMutable(StgPtr p) Informs the garbage collector that a - previously immutable object has - become (permanently) mutable. Used - by thawArray and similar. - updateWithIndirection(p1,p2) Updates the object at p1 with an indirection pointing to p2. This is normally called for objects in an old @@ -68,48 +64,6 @@ extern Mutex sm_mutex; #define ASSERT_SM_LOCK() #endif -INLINE_HEADER void -recordMutableGen(StgClosure *p, nat gen_no) -{ - bdescr *bd; - - bd = generations[gen_no].mut_list; - if (bd->free >= bd->start + BLOCK_SIZE_W) { - bdescr *new_bd; - new_bd = allocBlock(); - new_bd->link = bd; - bd = new_bd; - generations[gen_no].mut_list = bd; - } - *bd->free++ = (StgWord)p; - -} - -INLINE_HEADER void -recordMutableGenLock(StgClosure *p, nat gen_no) -{ - ACQUIRE_SM_LOCK; - recordMutableGen(p,gen_no); - RELEASE_SM_LOCK; -} - -INLINE_HEADER void -recordMutable(StgClosure *p) -{ - bdescr *bd; - ASSERT(closure_MUTABLE(p)); - bd = Bdescr((P_)p); - if (bd->gen_no > 0) recordMutableGen(p, bd->gen_no); -} - -INLINE_HEADER void -recordMutableLock(StgClosure *p) -{ - ACQUIRE_SM_LOCK; - recordMutable(p); - RELEASE_SM_LOCK; -} - /* ----------------------------------------------------------------------------- The write barrier for MVARs -------------------------------------------------------------------------- */ @@ -120,7 +74,10 @@ void dirty_MVAR(StgRegTable *reg, StgClosure *p); Nursery manipulation -------------------------------------------------------------------------- */ +extern nursery *nurseries; + void resetNurseries ( void ); +lnat clearNurseries ( void ); void resizeNurseries ( nat blocks ); void resizeNurseriesFixed ( nat blocks ); lnat countNurseryBlocks ( void ); @@ -129,33 +86,25 @@ lnat countNurseryBlocks ( void ); Stats 'n' DEBUG stuff -------------------------------------------------------------------------- */ -extern ullong total_allocated; - -lnat calcAllocated (void); +lnat calcAllocated (rtsBool count_nurseries); lnat calcLiveBlocks (void); lnat calcLiveWords (void); lnat countOccupied (bdescr *bd); lnat calcNeeded (void); -HsInt64 getAllocations (void); - -#if defined(DEBUG) -void memInventory (rtsBool show); -void checkSanity (void); -nat countBlocks (bdescr *); -void checkNurserySanity (step *stp); -#endif /* ---------------------------------------------------------------------------- Storage manager internal APIs and globals ------------------------------------------------------------------------- */ +extern bdescr *exec_block; + #define END_OF_STATIC_LIST ((StgClosure*)1) -void move_TSO (StgTSO *src, StgTSO *dest); +void move_STACK (StgStack *src, StgStack *dest); extern StgClosure * caf_list; extern StgClosure * revertible_caf_list; -#pragma GCC visibility pop +#include "EndPrivate.h" #endif /* SM_STORAGE_H */