1 /* -----------------------------------------------------------------------------
3 * (c) The GHC Team, 2000-2006
5 * Sparking support for GRAN, PAR and THREADED_RTS versions of the RTS.
7 * ---------------------------------------------------------------------------*/
12 #if defined(THREADED_RTS)
13 StgClosure * findSpark (Capability *cap);
14 void initSparkPools (void);
15 void freeSparkPool (StgSparkPool *pool);
16 void createSparkThread (Capability *cap, StgClosure *p);
17 void markSparkQueue (evac_fn evac, void *user, Capability *cap);
18 void traverseSparkQueue(evac_fn evac, void *user, Capability *cap);
20 INLINE_HEADER void discardSparks (StgSparkPool *pool);
21 INLINE_HEADER nat sparkPoolSize (StgSparkPool *pool);
22 INLINE_HEADER rtsBool emptySparkPool (StgSparkPool *pool);
24 INLINE_HEADER void discardSparksCap (Capability *cap);
25 INLINE_HEADER nat sparkPoolSizeCap (Capability *cap);
26 INLINE_HEADER rtsBool emptySparkPoolCap (Capability *cap);
29 /* -----------------------------------------------------------------------------
31 * -------------------------------------------------------------------------- */
33 #if defined(PARALLEL_HASKELL) || defined(THREADED_RTS)
36 emptySparkPool (StgSparkPool *pool)
38 return (pool->hd == pool->tl);
42 emptySparkPoolCap (Capability *cap)
43 { return emptySparkPool(&cap->r.rSparks); }
46 sparkPoolSize (StgSparkPool *pool)
48 if (pool->hd <= pool->tl) {
49 return (pool->tl - pool->hd);
51 return (pool->lim - pool->hd + pool->tl - pool->base);
56 sparkPoolSizeCap (Capability *cap)
57 { return sparkPoolSize(&cap->r.rSparks); }
60 discardSparks (StgSparkPool *pool)
66 discardSparksCap (Capability *cap)
67 { return discardSparks(&cap->r.rSparks); }
70 #elif defined(THREADED_RTS)
73 emptySparkPoolCap (Capability *cap STG_UNUSED)