+#include "SMP.h"
+
+bdescr *allocBlock_sync(void);
+void freeChain_sync(bdescr *bd);
+
+void push_scanned_block (bdescr *bd, step_workspace *ws);
+bdescr *grab_todo_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 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 + WORK_UNIT_WORDS < bd->start + BLOCK_SIZE_W);
+}
+
+
+#if DEBUG
+void printMutableList (generation *gen);
+#endif