X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FCapability.h;h=869fdc3c27fdb151667ae9d91b434f031c9c3b7d;hb=2b16fa4791b08b02df8461f3b79d0e44d72d0960;hp=779a1945a50d9ace8d20e93e03a5664269d2f7e3;hpb=99df892cc9620fcc92747b79bba75dad8a1d295c;p=ghc-hetmet.git diff --git a/rts/Capability.h b/rts/Capability.h index 779a194..869fdc3 100644 --- a/rts/Capability.h +++ b/rts/Capability.h @@ -106,8 +106,10 @@ struct Capability_ { StgTRecChunk *free_trec_chunks; StgTRecHeader *free_trec_headers; nat transaction_tokens; - -}; // typedef Capability, defined in RtsAPI.h +} // typedef Capability is defined in RtsAPI.h + // Capabilities are stored in an array, so make sure that adjacent + // Capabilities don't share any cache-lines: + ATTRIBUTE_ALIGNED(64); #if defined(THREADED_RTS) @@ -242,7 +244,11 @@ rtsBool tryGrabCapability (Capability *cap, Task *task); // Try to steal a spark from other Capabilities // -rtsBool stealWork (Capability *cap); +StgClosure *stealWork (Capability *cap); + +// True if any capabilities have sparks +// +rtsBool anySparks (void); INLINE_HEADER rtsBool emptySparkPoolCap (Capability *cap); INLINE_HEADER nat sparkPoolSizeCap (Capability *cap); @@ -260,11 +266,12 @@ extern void grabCapability (Capability **pCap); // cause all capabilities to context switch as soon as possible. void setContextSwitches(void); -// Free a capability on exit -void freeCapability (Capability *cap); +// Free all capabilities +void freeCapabilities (void); // FOr the GC: -void markSomeCapabilities (evac_fn evac, void *user, nat i0, nat delta); +void markSomeCapabilities (evac_fn evac, void *user, nat i0, nat delta, + rtsBool prune_sparks); void markCapabilities (evac_fn evac, void *user); void traverseSparkQueues (evac_fn evac, void *user);