move the scan block pointer into the gct structure
[ghc-hetmet.git] / rts / sm / GC.h
index 01c6024..62a4872 100644 (file)
    ------------------------------------------------------------------------- */
 
 typedef struct step_workspace_ {
-    step * stp;                        // the step for this workspace 
+    step * step;               // the step for this workspace 
     struct gc_thread_ * gct;    // the gc_thread that contains this workspace
 
-    // block that is currently being scanned
-    bdescr *     scan_bd;
-    StgPtr       scan;               // the scan pointer
-
     // where objects to be scavenged go
     bdescr *     todo_bd;
     StgPtr       todo_free;            // free ptr for todo_bd
@@ -91,9 +87,13 @@ typedef struct step_workspace_ {
     // where large objects to be scavenged go
     bdescr *     todo_large_objects;
 
-    // Objects that need not be, or have already been, scavenged.
+    // Objects that have already been, scavenged.
     bdescr *     scavd_list;
-    lnat         n_scavd_blocks;     // count of blocks in this list
+    nat          n_scavd_blocks;     // count of blocks in this list
+
+    // Partially-full, scavenged, blocks
+    bdescr *     part_list;
+    unsigned int n_part_blocks;      // count of above
 
 } step_workspace;
 
@@ -123,7 +123,10 @@ typedef struct gc_thread_ {
     StgClosure* static_objects;      // live static objects
     StgClosure* scavenged_static_objects;   // static objects scavenged so far
 
-    lnat gc_count;                 // number of gc's this thread has done
+    lnat gc_count;                 // number of GCs this thread has done
+
+    // block that is currently being scanned
+    bdescr *     scan_bd;
 
     // --------------------
     // evacuate flags
@@ -137,7 +140,7 @@ typedef struct gc_thread_ {
                                    // variable).
 
     rtsBool failed_to_evac;        // failure to evacuate an object typically 
-                                   // causes it to be recorded in the mutable 
+                                   // Causes it to be recorded in the mutable 
                                    // object list
 
     rtsBool eager_promotion;       // forces promotion to the evac gen
@@ -154,10 +157,10 @@ typedef struct gc_thread_ {
     // stats
 
     lnat copied;
+    lnat scanned;
     lnat any_work;
     lnat no_work;
-    lnat scav_global_work;
-    lnat scav_local_work;
+    lnat scav_find_work;
 
     // -------------------
     // workspaces
@@ -172,6 +175,7 @@ typedef struct gc_thread_ {
 
 extern nat N;
 extern rtsBool major_gc;
+extern nat n_gc_threads;
 
 extern gc_thread **gc_threads;
 register gc_thread *gct __asm__("%rbx");
@@ -194,4 +198,6 @@ extern nat mutlist_MUTVARS, mutlist_MUTARRS, mutlist_MVARS, mutlist_OTHERS;
 
 StgClosure * isAlive(StgClosure *p);
 
+#define WORK_UNIT_WORDS 128
+
 #endif /* GC_H */