X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FSchedule.h;h=2412285d29bf780a4f1a66309528a98f950f1722;hb=79957d77c1bff767f1041d3fabdeb94d92a52878;hp=2dd4acd0d99be8a63f8fa0736eca968272d581f9;hpb=9a9803e8dc80ba41bd3e2d31228e64fa6b61060e;p=ghc-hetmet.git diff --git a/rts/Schedule.h b/rts/Schedule.h index 2dd4acd..2412285 100644 --- a/rts/Schedule.h +++ b/rts/Schedule.h @@ -46,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 @@ -112,7 +105,6 @@ extern Mutex sched_mutex; void interruptStgRts (void); void resurrectThreads (StgTSO *); -void performPendingThrowTos (StgTSO *); /* ----------------------------------------------------------------------------- * Some convenient macros/inline functions... @@ -126,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); @@ -136,13 +131,16 @@ appendToRunQueue (Capability *cap, StgTSO *tso) setTSOLink(cap, cap->run_queue_tl, tso); } cap->run_queue_tl = tso; - traceSchedEvent (cap, EVENT_THREAD_RUNNABLE, tso, 0); + traceEventThreadRunnable (cap, tso); } /* Push a thread on the beginning of the run queue. * ASSUMES: cap->running_task is the current task. */ -INLINE_HEADER void +EXTERN_INLINE void +pushOnRunQueue (Capability *cap, StgTSO *tso); + +EXTERN_INLINE void pushOnRunQueue (Capability *cap, StgTSO *tso) { setTSOLink(cap, tso, cap->run_queue_hd); @@ -183,25 +181,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 @@ -216,14 +195,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))