X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FGCUtils.h;h=32810b64102bd5b57b150b9721eba214eb3db34f;hb=27de38efce6d73d2a0209f803cfa98c82773e773;hp=57c3b0ced5c80b62422523b8ed92649c78904d78;hpb=047b7c2f56d60e551892915dc6f47371a46389d7;p=ghc-hetmet.git diff --git a/rts/sm/GCUtils.h b/rts/sm/GCUtils.h index 57c3b0c..32810b6 100644 --- a/rts/sm/GCUtils.h +++ b/rts/sm/GCUtils.h @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- * - * (c) The GHC Team 1998-2006 + * (c) The GHC Team 1998-2008 * * Generational garbage collector: utilities * @@ -13,24 +13,21 @@ #include "SMP.h" -#ifdef THREADED_RTS -extern SpinLock gc_alloc_block_sync; -#endif - bdescr *allocBlock_sync(void); +void freeChain_sync(bdescr *bd); -void push_scan_block (bdescr *bd, step_workspace *ws); +void push_scanned_block (bdescr *bd, step_workspace *ws); bdescr *grab_todo_block (step_workspace *ws); -StgPtr gc_alloc_todo_block (step_workspace *ws); -bdescr *gc_alloc_scavd_block (step_workspace *ws); +StgPtr todo_block_full (nat size, step_workspace *ws); +StgPtr alloc_todo_block (step_workspace *ws, nat size); -// Returns true if a block is 3/4 full. This predicate is used to try +// Returns true if a block is partially full. This predicate is used to try // to re-use partial blocks wherever possible, and to reduce wastage. // We might need to tweak the actual value. INLINE_HEADER rtsBool isPartiallyFull(bdescr *bd) { - return (bd->free + BLOCK_SIZE_W/4 < bd->start + BLOCK_SIZE_W); + return (bd->free + WORK_UNIT_WORDS < bd->start + BLOCK_SIZE_W); }