X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FGCThread.h;h=aacef82cbcd404f044ebbfaf62507fbc7c683402;hb=b6fcd8d1287ac70186c798013e270b0743eb7aa2;hp=1d0a05ce447285f9c12ec3e5bd17ae8c8ffa82ef;hpb=e50364a5a8e5d736445cd8e5b10a813ec0a5a2e0;p=ghc-hetmet.git diff --git a/rts/sm/GCThread.h b/rts/sm/GCThread.h index 1d0a05c..aacef82 100644 --- a/rts/sm/GCThread.h +++ b/rts/sm/GCThread.h @@ -15,6 +15,7 @@ #define GCTHREAD_H #include "OSThreads.h" +#include "WSDeque.h" /* ----------------------------------------------------------------------------- General scheme @@ -81,13 +82,14 @@ typedef struct step_workspace_ { StgPtr todo_free; // free ptr for todo_bd StgPtr todo_lim; // lim for todo_bd - bdescr * buffer_todo_bd; // buffer to reduce contention - // on the step's todos list + WSDeque * todo_q; + bdescr * todo_overflow; + nat n_todo_overflow; // where large objects to be scavenged go bdescr * todo_large_objects; - // Objects that have already been, scavenged. + // Objects that have already been scavenged. bdescr * scavd_list; nat n_scavd_blocks; // count of blocks in this list @@ -95,7 +97,7 @@ typedef struct step_workspace_ { bdescr * part_list; unsigned int n_part_blocks; // count of above - StgWord pad[5]; + StgWord pad[3]; } step_workspace ATTRIBUTE_ALIGNED(64); // align so that computing gct->steps[n] is a shift, not a multiply @@ -131,6 +133,14 @@ typedef struct gc_thread_ { // block that is currently being scanned bdescr * scan_bd; + // Remembered sets on this CPU. Each GC thread has its own + // private per-generation remembered sets, so it can add an item + // to the remembered set without taking a lock. The mut_lists + // array on a gc_thread is the same as the one on the + // corresponding Capability; we stash it here too for easy access + // during GC; see recordMutableGen_GC(). + bdescr ** mut_lists; + // -------------------- // evacuate flags