X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FCapability.h;h=db9e1e3afd07941de7d451240f546fef99805e6c;hb=63179a7b10069d8f69f5bceef27008c9c7fb0aa8;hp=89b813f6d3f725e77bc7dabfc30886ae17cdd486;hpb=17a596022d01987d5ffe7db0742aa8db267b8cc3;p=ghc-hetmet.git diff --git a/rts/Capability.h b/rts/Capability.h index 89b813f..db9e1e3 100644 --- a/rts/Capability.h +++ b/rts/Capability.h @@ -106,8 +106,13 @@ 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: +#ifndef mingw32_HOST_OS + ATTRIBUTE_ALIGNED(64) +#endif + ; #if defined(THREADED_RTS) @@ -240,9 +245,13 @@ void shutdownCapability (Capability *cap, Task *task, rtsBool wait_foreign); // rtsBool tryGrabCapability (Capability *cap, Task *task); -// Try to steal a spark from other Capabilities +// Try to find a spark to run +// +StgClosure *findSpark (Capability *cap); + +// True if any capabilities have sparks // -rtsBool stealWork (Capability *cap); +rtsBool anySparks (void); INLINE_HEADER rtsBool emptySparkPoolCap (Capability *cap); INLINE_HEADER nat sparkPoolSizeCap (Capability *cap); @@ -260,8 +269,8 @@ 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,