X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2FSchedule.h;h=76138b68f369e99b95b636402c0fa7b9ab71b7bf;hp=378bd68c66219041440a8404805dd432b13d460d;hb=7408b39235bccdcde48df2a73337ff976fbc09b7;hpb=a2a67cd520b9841114d69a87a423dabcb3b4368e diff --git a/rts/Schedule.h b/rts/Schedule.h index 378bd68..76138b6 100644 --- a/rts/Schedule.h +++ b/rts/Schedule.h @@ -12,7 +12,9 @@ #include "rts/OSThreads.h" #include "Capability.h" -#include "eventlog/EventLog.h" +#include "Trace.h" + +BEGIN_RTS_PRIVATE /* initScheduler(), exitScheduler() * Called from STG : no @@ -44,15 +46,8 @@ StgWord raiseExceptionHelper (StgRegTable *reg, StgTSO *tso, StgClosure *excepti /* findRetryFrameHelper */ StgWord findRetryFrameHelper (StgTSO *tso); -/* workerStart() - * - * Entry point for a new worker task. - * Called from STG : NO - * Locks assumed : none - */ -#if defined(THREADED_RTS) -void OSThreadProcAttr workerStart(Task *task); -#endif +/* Entry point for a new worker */ +void scheduleWorker (Capability *cap, Task *task); /* The state of the scheduler. This is used to control the sequence * of events during shutdown, and when the runtime is interrupted @@ -110,7 +105,6 @@ extern Mutex sched_mutex; void interruptStgRts (void); void resurrectThreads (StgTSO *); -void performPendingThrowTos (StgTSO *); /* ----------------------------------------------------------------------------- * Some convenient macros/inline functions... @@ -124,7 +118,10 @@ void performPendingThrowTos (StgTSO *); * NOTE: tso->link should be END_TSO_QUEUE before calling this macro. * ASSUMES: cap->running_task is the current task. */ -INLINE_HEADER void +EXTERN_INLINE void +appendToRunQueue (Capability *cap, StgTSO *tso); + +EXTERN_INLINE void appendToRunQueue (Capability *cap, StgTSO *tso) { ASSERT(tso->_link == END_TSO_QUEUE); @@ -134,7 +131,7 @@ appendToRunQueue (Capability *cap, StgTSO *tso) setTSOLink(cap, cap->run_queue_tl, tso); } cap->run_queue_tl = tso; - postEvent (cap, EVENT_THREAD_RUNNABLE, tso->id, 0); + traceEventThreadRunnable (cap, tso); } /* Push a thread on the beginning of the run queue. @@ -181,25 +178,6 @@ appendToBlockedQueue(StgTSO *tso) } #endif -#if defined(THREADED_RTS) -// Assumes: my_cap is owned by the current Task. We hold -// other_cap->lock, but we do not necessarily own other_cap; another -// Task may be running on it. -INLINE_HEADER void -appendToWakeupQueue (Capability *my_cap, Capability *other_cap, StgTSO *tso) -{ - ASSERT(tso->_link == END_TSO_QUEUE); - if (other_cap->wakeup_queue_hd == END_TSO_QUEUE) { - other_cap->wakeup_queue_hd = tso; - } else { - // my_cap is passed to setTSOLink() because it may need to - // write to the mutable list. - setTSOLink(my_cap, other_cap->wakeup_queue_tl, tso); - } - other_cap->wakeup_queue_tl = tso; -} -#endif - /* Check whether various thread queues are empty */ INLINE_HEADER rtsBool @@ -214,14 +192,6 @@ emptyRunQueue(Capability *cap) return emptyQueue(cap->run_queue_hd); } -#if defined(THREADED_RTS) -INLINE_HEADER rtsBool -emptyWakeupQueue(Capability *cap) -{ - return emptyQueue(cap->wakeup_queue_hd); -} -#endif - #if !defined(THREADED_RTS) #define EMPTY_BLOCKED_QUEUE() (emptyQueue(blocked_queue_hd)) #define EMPTY_SLEEPING_QUEUE() (emptyQueue(sleeping_queue)) @@ -239,5 +209,7 @@ emptyThreadQueues(Capability *cap) #endif /* !IN_STG_CODE */ +END_RTS_PRIVATE + #endif /* SCHEDULE_H */