projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
remove outdated comment
[ghc-hetmet.git]
/
rts
/
Sparks.c
diff --git
a/rts/Sparks.c
b/rts/Sparks.c
index
0fe8b61
..
7e2556d
100644
(file)
--- a/
rts/Sparks.c
+++ b/
rts/Sparks.c
@@
-8,17
+8,11
@@
#include "PosixSource.h"
#include "Rts.h"
#include "PosixSource.h"
#include "Rts.h"
-#include "Storage.h"
+
#include "Schedule.h"
#include "Schedule.h"
-#include "SchedAPI.h"
-#include "RtsFlags.h"
#include "RtsUtils.h"
#include "RtsUtils.h"
-#include "ParTicky.h"
#include "Trace.h"
#include "Prelude.h"
#include "Trace.h"
#include "Prelude.h"
-
-#include "SMP.h" // for cas
-
#include "Sparks.h"
#if defined(THREADED_RTS)
#include "Sparks.h"
#if defined(THREADED_RTS)
@@
-51,9
+45,9
@@
createSparkThread (Capability *cap)
StgTSO *tso;
tso = createIOThread (cap, RtsFlags.GcFlags.initialStkSize,
StgTSO *tso;
tso = createIOThread (cap, RtsFlags.GcFlags.initialStkSize,
- &base_GHCziConc_runSparks_closure);
+ (StgClosure *)runSparks_closure);
- postEvent(cap, EVENT_CREATE_SPARK_THREAD, 0, tso->id);
+ traceEventCreateSparkThread(cap, tso->id);
appendToRunQueue(cap,tso);
}
appendToRunQueue(cap,tso);
}
@@
-81,8
+75,6
@@
newSpark (StgRegTable *reg, StgClosure *p)
cap->sparks_created++;
cap->sparks_created++;
- postEvent(cap, EVENT_CREATE_SPARK, cap->r.rCurrentTSO->id, 0);
-
return 1;
}
return 1;
}
@@
-120,7
+112,7
@@
tryStealSpark (Capability *cap)
* -------------------------------------------------------------------------- */
void
* -------------------------------------------------------------------------- */
void
-pruneSparkQueue (evac_fn evac, void *user, Capability *cap)
+pruneSparkQueue (Capability *cap)
{
SparkPool *pool;
StgClosurePtr spark, tmp, *elements;
{
SparkPool *pool;
StgClosurePtr spark, tmp, *elements;
@@
-128,8
+120,6
@@
pruneSparkQueue (evac_fn evac, void *user, Capability *cap)
StgWord botInd,oldBotInd,currInd; // indices in array (always < size)
const StgInfoTable *info;
StgWord botInd,oldBotInd,currInd; // indices in array (always < size)
const StgInfoTable *info;
- PAR_TICKY_MARK_SPARK_QUEUE_START();
-
n = 0;
pruned_sparks = 0;
n = 0;
pruned_sparks = 0;
@@
-148,7
+138,7
@@
pruneSparkQueue (evac_fn evac, void *user, Capability *cap)
pool->top &= pool->moduloSize;
pool->topBound = pool->top;
pool->top &= pool->moduloSize;
pool->topBound = pool->top;
- debugTrace(DEBUG_sched,
+ debugTrace(DEBUG_sparks,
"markSparkQueue: current spark queue len=%ld; (hd=%ld; tl=%ld)",
sparkPoolSize(pool), pool->bottom, pool->top);
"markSparkQueue: current spark queue len=%ld; (hd=%ld; tl=%ld)",
sparkPoolSize(pool), pool->bottom, pool->top);
@@
-218,17
+208,21
@@
pruneSparkQueue (evac_fn evac, void *user, Capability *cap)
pruned_sparks++; // discard spark
cap->sparks_pruned++;
}
pruned_sparks++; // discard spark
cap->sparks_pruned++;
}
- } else {
- if (!(closure_flags[INFO_PTR_TO_STRUCT(info)->type] & _NS)) {
+ } else if (HEAP_ALLOCED(spark) &&
+ (Bdescr((P_)spark)->flags & BF_EVACUATED)) {
+ if (closure_SHOULD_SPARK(spark)) {
elements[botInd] = spark; // keep entry (new address)
elements[botInd] = spark; // keep entry (new address)
- evac (user, &elements[botInd]);
botInd++;
n++;
} else {
pruned_sparks++; // discard spark
cap->sparks_pruned++;
}
botInd++;
n++;
} else {
pruned_sparks++; // discard spark
cap->sparks_pruned++;
}
+ } else {
+ pruned_sparks++; // discard spark
+ cap->sparks_pruned++;
}
}
+
currInd++;
// in the loop, we may reach the bounds, and instantly wrap around
currInd++;
// in the loop, we may reach the bounds, and instantly wrap around
@@
-246,11
+240,9
@@
pruneSparkQueue (evac_fn evac, void *user, Capability *cap)
pool->bottom = (oldBotInd <= botInd) ? botInd : (botInd + pool->size);
// first free place we did not use (corrected by wraparound)
pool->bottom = (oldBotInd <= botInd) ? botInd : (botInd + pool->size);
// first free place we did not use (corrected by wraparound)
- PAR_TICKY_MARK_SPARK_QUEUE_END(n);
-
- debugTrace(DEBUG_sched, "pruned %d sparks", pruned_sparks);
+ debugTrace(DEBUG_sparks, "pruned %d sparks", pruned_sparks);
- debugTrace(DEBUG_sched,
+ debugTrace(DEBUG_sparks,
"new spark queue len=%ld; (hd=%ld; tl=%ld)",
sparkPoolSize(pool), pool->bottom, pool->top);
"new spark queue len=%ld; (hd=%ld; tl=%ld)",
sparkPoolSize(pool), pool->bottom, pool->top);
@@
-284,7
+276,7
@@
traverseSparkQueue (evac_fn evac, void *user, Capability *cap)
top++;
}
top++;
}
- debugTrace(DEBUG_sched,
+ debugTrace(DEBUG_sparks,
"traversed spark queue, len=%ld; (hd=%ld; tl=%ld)",
sparkPoolSize(pool), pool->bottom, pool->top);
}
"traversed spark queue, len=%ld; (hd=%ld; tl=%ld)",
sparkPoolSize(pool), pool->bottom, pool->top);
}
@@
-296,7
+288,8
@@
traverseSparkQueue (evac_fn evac, void *user, Capability *cap)
*
* Could be called after GC, before Cap. release, from scheduler.
* -------------------------------------------------------------------------- */
*
* Could be called after GC, before Cap. release, from scheduler.
* -------------------------------------------------------------------------- */
-void balanceSparkPoolsCaps(nat n_caps, Capability caps[]);
+void balanceSparkPoolsCaps(nat n_caps, Capability caps[])
+ GNUC3_ATTRIBUTE(__noreturn__);
void balanceSparkPoolsCaps(nat n_caps STG_UNUSED,
Capability caps[] STG_UNUSED) {
void balanceSparkPoolsCaps(nat n_caps STG_UNUSED,
Capability caps[] STG_UNUSED) {