projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
un-disable warnings in some modules
[ghc-hetmet.git]
/
rts
/
Schedule.c
diff --git
a/rts/Schedule.c
b/rts/Schedule.c
index
94aac6c
..
7f59f09
100644
(file)
--- a/
rts/Schedule.c
+++ b/
rts/Schedule.c
@@
-969,10
+969,10
@@
scheduleDetectDeadlock (Capability *cap, Task *task)
* Send pending messages (PARALLEL_HASKELL only)
* ------------------------------------------------------------------------- */
* Send pending messages (PARALLEL_HASKELL only)
* ------------------------------------------------------------------------- */
+#if defined(PARALLEL_HASKELL)
static StgTSO *
scheduleSendPendingMessages(void)
{
static StgTSO *
scheduleSendPendingMessages(void)
{
-#if defined(PARALLEL_HASKELL)
# if defined(PAR) // global Mem.Mgmt., omit for now
if (PendingFetches != END_BF_QUEUE) {
# if defined(PAR) // global Mem.Mgmt., omit for now
if (PendingFetches != END_BF_QUEUE) {
@@
-985,8
+985,8
@@
scheduleSendPendingMessages(void)
// packets which have become too old...
sendOldBuffers();
}
// packets which have become too old...
sendOldBuffers();
}
-#endif
}
}
+#endif
/* ----------------------------------------------------------------------------
* Activate spark threads (PARALLEL_HASKELL only)
/* ----------------------------------------------------------------------------
* Activate spark threads (PARALLEL_HASKELL only)
@@
-1402,10
+1402,10
@@
scheduleNeedHeapProfile( rtsBool ready_to_gc STG_UNUSED )
static Capability *
scheduleDoGC (Capability *cap, Task *task USED_IF_THREADS, rtsBool force_major)
{
static Capability *
scheduleDoGC (Capability *cap, Task *task USED_IF_THREADS, rtsBool force_major)
{
- StgTSO *t;
rtsBool heap_census;
#ifdef THREADED_RTS
rtsBool heap_census;
#ifdef THREADED_RTS
- static volatile StgWord waiting_for_gc;
+ /* extern static volatile StgWord waiting_for_gc;
+ lives inside capability.c */
rtsBool was_waiting;
nat i;
#endif
rtsBool was_waiting;
nat i;
#endif
@@
-1422,6
+1422,10
@@
scheduleDoGC (Capability *cap, Task *task USED_IF_THREADS, rtsBool force_major)
// the other tasks to sleep and stay asleep.
//
// the other tasks to sleep and stay asleep.
//
+ /* Other capabilities are prevented from running yet more Haskell
+ threads if waiting_for_gc is set. Tested inside
+ yieldCapability() and releaseCapability() in Capability.c */
+
was_waiting = cas(&waiting_for_gc, 0, 1);
if (was_waiting) {
do {
was_waiting = cas(&waiting_for_gc, 0, 1);
if (was_waiting) {
do {
@@
-1866,7
+1870,7
@@
scheduleThreadOn(Capability *cap, StgWord cpu USED_IF_THREADS, StgTSO *tso)
if (cpu == cap->no) {
appendToRunQueue(cap,tso);
} else {
if (cpu == cap->no) {
appendToRunQueue(cap,tso);
} else {
- migrateThreadToCapability_lock(&capabilities[cpu],tso);
+ wakeupThreadOnCapability(cap, &capabilities[cpu], tso);
}
#else
appendToRunQueue(cap,tso);
}
#else
appendToRunQueue(cap,tso);
@@
-2206,7
+2210,7
@@
threadStackUnderflow (Task *task STG_UNUSED, StgTSO *tso)
new_tso_size_w = round_to_mblocks(tso_size_w/2);
debugTrace(DEBUG_sched, "thread %ld: reducing TSO size from %lu words to %lu",
new_tso_size_w = round_to_mblocks(tso_size_w/2);
debugTrace(DEBUG_sched, "thread %ld: reducing TSO size from %lu words to %lu",
- tso->id, tso_size_w, new_tso_size_w);
+ (long)tso->id, tso_size_w, new_tso_size_w);
bd = Bdescr((StgPtr)tso);
new_bd = splitLargeBlock(bd, new_tso_size_w / BLOCK_SIZE_W);
bd = Bdescr((StgPtr)tso);
new_bd = splitLargeBlock(bd, new_tso_size_w / BLOCK_SIZE_W);
@@
-2307,8
+2311,6
@@
checkBlackHoles (Capability *cap)
if (type != BLACKHOLE && type != CAF_BLACKHOLE) {
IF_DEBUG(sanity,checkTSO(t));
t = unblockOne(cap, t);
if (type != BLACKHOLE && type != CAF_BLACKHOLE) {
IF_DEBUG(sanity,checkTSO(t));
t = unblockOne(cap, t);
- // urk, the threads migrate to the current capability
- // here, but we'd like to keep them on the original one.
*prev = t;
any_woke_up = rtsTrue;
} else {
*prev = t;
any_woke_up = rtsTrue;
} else {