X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FStorage.h;h=d463d1a2ba0a6a3e54344bbd201e068eefd02257;hb=HEAD;hp=fdb6a4692500decf1aee50b3880751e00b64182e;hpb=db0c13a482893243cc829bbc253862e65f437cbe;p=ghc-hetmet.git diff --git a/rts/sm/Storage.h b/rts/sm/Storage.h index fdb6a46..d463d1a 100644 --- a/rts/sm/Storage.h +++ b/rts/sm/Storage.h @@ -38,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 @@ -69,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 -------------------------------------------------------------------------- */ @@ -134,11 +87,18 @@ lnat countNurseryBlocks ( void ); -------------------------------------------------------------------------- */ lnat calcAllocated (rtsBool count_nurseries); -lnat calcLiveBlocks (void); -lnat calcLiveWords (void); lnat countOccupied (bdescr *bd); lnat calcNeeded (void); +lnat gcThreadLiveWords (nat i, nat g); +lnat gcThreadLiveBlocks (nat i, nat g); + +lnat genLiveWords (generation *gen); +lnat genLiveBlocks (generation *gen); + +lnat calcLiveBlocks (void); +lnat calcLiveWords (void); + /* ---------------------------------------------------------------------------- Storage manager internal APIs and globals ------------------------------------------------------------------------- */