Make allocatePinned use local storage, and other refactorings
[ghc-hetmet.git] / rts / sm / Storage.h
index ea744a7..30bdf54 100644 (file)
@@ -9,7 +9,9 @@
 #ifndef SM_STORAGE_H
 #define SM_STORAGE_H
 
-#pragma GCC visibility push(hidden)
+#include "Capability.h"
+
+BEGIN_RTS_PRIVATE
 
 /* -----------------------------------------------------------------------------
    Initialisation / De-initialisation
@@ -23,15 +25,11 @@ void freeStorage(void);
    Storage manager state
    -------------------------------------------------------------------------- */
 
-extern bdescr * pinned_object_block;
-
-extern nat alloc_blocks;
-extern nat alloc_blocks_lim;
-
 INLINE_HEADER rtsBool
-doYouWantToGC( void )
+doYouWantToGC( Capability *cap )
 {
-  return (alloc_blocks >= alloc_blocks_lim);
+  return (cap->r.rCurrentNursery->link == NULL ||
+          cap->r.rNursery->n_large_blocks >= alloc_blocks_lim);
 }
 
 /* for splitting blocks groups in two */
@@ -114,16 +112,7 @@ recordMutableLock(StgClosure *p)
 }
 
 /* -----------------------------------------------------------------------------
-   This is the write barrier for MUT_VARs, a.k.a. IORefs.  A
-   MUT_VAR_CLEAN object is not on the mutable list; a MUT_VAR_DIRTY
-   is.  When written to, a MUT_VAR_CLEAN turns into a MUT_VAR_DIRTY
-   and is put on the mutable list.
-   -------------------------------------------------------------------------- */
-
-void dirty_MUT_VAR(StgRegTable *reg, StgClosure *p);
-
-/* -----------------------------------------------------------------------------
-   Similarly, the write barrier for MVARs
+   The write barrier for MVARs
    -------------------------------------------------------------------------- */
 
 void dirty_MVAR(StgRegTable *reg, StgClosure *p);
@@ -132,6 +121,8 @@ void dirty_MVAR(StgRegTable *reg, StgClosure *p);
    Nursery manipulation
    -------------------------------------------------------------------------- */
 
+extern step *nurseries;
+
 void     resetNurseries       ( void );
 void     resizeNurseries      ( nat blocks );
 void     resizeNurseriesFixed ( nat blocks );
@@ -168,6 +159,6 @@ void move_TSO  (StgTSO *src, StgTSO *dest);
 extern StgClosure * caf_list;
 extern StgClosure * revertible_caf_list;
 
-#pragma GCC visibility pop
+END_RTS_PRIVATE
 
 #endif /* SM_STORAGE_H */