Make start address of `osReserveHeapMemory` tunable via command line -xb
[ghc.git] / rts / Messages.c
index 34dcbdf..2177dd1 100644 (file)
@@ -25,7 +25,7 @@ void sendMessage(Capability *from_cap, Capability *to_cap, Message *msg)
 {
     ACQUIRE_LOCK(&to_cap->lock);
 
-#ifdef DEBUG    
+#ifdef DEBUG
     {
         const StgInfoTable *i = msg->header.info;
         if (i != &stg_MSG_THROWTO_info &&
@@ -44,7 +44,7 @@ void sendMessage(Capability *from_cap, Capability *to_cap, Message *msg)
     recordClosureMutated(from_cap,(StgClosure*)msg);
 
     if (to_cap->running_task == NULL) {
-       to_cap->running_task = myTask(); 
+        to_cap->running_task = myTask();
             // precond for releaseCapability_()
         releaseCapability_(to_cap,rtsFalse);
     } else {
@@ -73,14 +73,14 @@ loop:
     if (i == &stg_MSG_TRY_WAKEUP_info)
     {
         StgTSO *tso = ((MessageWakeup *)m)->tso;
-        debugTraceCap(DEBUG_sched, cap, "message: try wakeup thread %ld", 
+        debugTraceCap(DEBUG_sched, cap, "message: try wakeup thread %ld",
                       (W_)tso->id);
         tryWakeupThread(cap, tso);
     }
     else if (i == &stg_MSG_THROWTO_info)
     {
         MessageThrowTo *t = (MessageThrowTo *)m;
-        nat r;
+        uint32_t r;
         const StgInfoTable *i;
 
         i = lockClosure((StgClosure*)m);
@@ -89,7 +89,7 @@ loop:
             goto loop;
         }
 
-        debugTraceCap(DEBUG_sched, cap, "message: throwTo %ld -> %ld", 
+        debugTraceCap(DEBUG_sched, cap, "message: throwTo %ld -> %ld",
                       (W_)t->source->id, (W_)t->target->id);
 
         ASSERT(t->source->why_blocked == BlockedOnMsgThrowTo);
@@ -113,7 +113,7 @@ loop:
     }
     else if (i == &stg_MSG_BLACKHOLE_info)
     {
-        nat r;
+        uint32_t r;
         MessageBlackHole *b = (MessageBlackHole*)m;
 
         r = messageBlackHole(cap, b);
@@ -144,10 +144,10 @@ loop:
 
    This is called from two places: either we just entered a BLACKHOLE
    (stg_BLACKHOLE_info), or we received a MSG_BLACKHOLE in our
-   cap->inbox.  
+   cap->inbox.
 
    We need to establish whether the BLACKHOLE belongs to
-   this Capability, and 
+   this Capability, and
      - if so, arrange to block the current thread on it
      - otherwise, forward the message to the right place
 
@@ -158,7 +158,7 @@ loop:
 
    ------------------------------------------------------------------------- */
 
-nat messageBlackHole(Capability *cap, MessageBlackHole *msg)
+uint32_t messageBlackHole(Capability *cap, MessageBlackHole *msg)
 {
     const StgInfoTable *info;
     StgClosure *p;
@@ -166,8 +166,8 @@ nat messageBlackHole(Capability *cap, MessageBlackHole *msg)
     StgClosure *bh = UNTAG_CLOSURE(msg->bh);
     StgTSO *owner;
 
-    debugTraceCap(DEBUG_sched, cap, "message: thread %d blocking on blackhole %p", 
-                  (W_)msg->tso->id, msg->bh);
+    debugTraceCap(DEBUG_sched, cap, "message: thread %d blocking on "
+                  "blackhole %p", (W_)msg->tso->id, msg->bh);
 
     info = bh->header.info;
 
@@ -175,8 +175,8 @@ nat messageBlackHole(Capability *cap, MessageBlackHole *msg)
     // BLACKHOLE has already been updated, and GC has shorted out the
     // indirection, so the pointer no longer points to a BLACKHOLE at
     // all.
-    if (info != &stg_BLACKHOLE_info && 
-        info != &stg_CAF_BLACKHOLE_info && 
+    if (info != &stg_BLACKHOLE_info &&
+        info != &stg_CAF_BLACKHOLE_info &&
         info != &__stg_EAGER_BLACKHOLE_info &&
         info != &stg_WHITEHOLE_info) {
         // if it is a WHITEHOLE, then a thread is in the process of
@@ -210,7 +210,8 @@ loop:
 #ifdef THREADED_RTS
         if (owner->cap != cap) {
             sendMessage(cap, owner->cap, (Message*)msg);
-            debugTraceCap(DEBUG_sched, cap, "forwarding message to cap %d", owner->cap->no);
+            debugTraceCap(DEBUG_sched, cap, "forwarding message to cap %d",
+                          owner->cap->no);
             return 1;
         }
 #endif
@@ -219,15 +220,15 @@ loop:
         // BLACKHOLE, so we first create a BLOCKING_QUEUE object.
 
         bq = (StgBlockingQueue*)allocate(cap, sizeofW(StgBlockingQueue));
-            
+
         // initialise the BLOCKING_QUEUE object
         SET_HDR(bq, &stg_BLOCKING_QUEUE_DIRTY_info, CCS_SYSTEM);
         bq->bh = bh;
         bq->queue = msg;
         bq->owner = owner;
-        
+
         msg->link = (MessageBlackHole*)END_TSO_QUEUE;
-        
+
         // All BLOCKING_QUEUES are linked in a list on owner->bq, so
         // that we can search through them in the event that there is
         // a collision to update a BLACKHOLE and a BLOCKING_QUEUE
@@ -246,8 +247,7 @@ loop:
         // the current thread, since in that case it will not be on
         // the run queue.
         if (owner->why_blocked == NotBlocked && owner->id != msg->tso->id) {
-            removeFromRunQueue(cap, owner);
-            pushOnRunQueue(cap,owner);
+            promoteInRunQueue(cap, owner);
         }
 
         // point to the BLOCKING_QUEUE from the BLACKHOLE
@@ -255,12 +255,12 @@ loop:
         ((StgInd*)bh)->indirectee = (StgClosure *)bq;
         recordClosureMutated(cap,bh); // bh was mutated
 
-        debugTraceCap(DEBUG_sched, cap, "thread %d blocked on thread %d", 
+        debugTraceCap(DEBUG_sched, cap, "thread %d blocked on thread %d",
                       (W_)msg->tso->id, (W_)owner->id);
 
         return 1; // blocked
     }
-    else if (info == &stg_BLOCKING_QUEUE_CLEAN_info || 
+    else if (info == &stg_BLOCKING_QUEUE_CLEAN_info ||
              info == &stg_BLOCKING_QUEUE_DIRTY_info)
     {
         StgBlockingQueue *bq = (StgBlockingQueue *)p;
@@ -274,7 +274,8 @@ loop:
 #ifdef THREADED_RTS
         if (owner->cap != cap) {
             sendMessage(cap, owner->cap, (Message*)msg);
-            debugTraceCap(DEBUG_sched, cap, "forwarding message to cap %d", owner->cap->no);
+            debugTraceCap(DEBUG_sched, cap, "forwarding message to cap %d",
+                          owner->cap->no);
             return 1;
         }
 #endif
@@ -288,18 +289,17 @@ loop:
             recordClosureMutated(cap,(StgClosure*)bq);
         }
 
-        debugTraceCap(DEBUG_sched, cap, "thread %d blocked on thread %d", 
+        debugTraceCap(DEBUG_sched, cap, "thread %d blocked on thread %d",
                       (W_)msg->tso->id, (W_)owner->id);
 
         // See above, #3838
         if (owner->why_blocked == NotBlocked && owner->id != msg->tso->id) {
-            removeFromRunQueue(cap, owner);
-            pushOnRunQueue(cap,owner);
+            promoteInRunQueue(cap, owner);
         }
 
         return 1; // blocked
     }
-    
+
     return 0; // not blocked
 }
 
@@ -315,7 +315,7 @@ StgTSO * blackHoleOwner (StgClosure *bh)
     info = bh->header.info;
 
     if (info != &stg_BLACKHOLE_info &&
-        info != &stg_CAF_BLACKHOLE_info && 
+        info != &stg_CAF_BLACKHOLE_info &&
         info != &__stg_EAGER_BLACKHOLE_info &&
         info != &stg_WHITEHOLE_info) {
         return NULL;
@@ -335,14 +335,12 @@ loop:
     {
         return (StgTSO*)p;
     }
-    else if (info == &stg_BLOCKING_QUEUE_CLEAN_info || 
+    else if (info == &stg_BLOCKING_QUEUE_CLEAN_info ||
              info == &stg_BLOCKING_QUEUE_DIRTY_info)
     {
         StgBlockingQueue *bq = (StgBlockingQueue *)p;
         return bq->owner;
     }
-    
+
     return NULL; // not blocked
 }
-
-