X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FSchedule.h;h=00b4de17977f02ca76ad7617192e00d74e63493f;hb=cd7dc9b1d4277ead419f45264fead9ef02b65bcb;hp=d0c3f9923dc5d9f4e2db873205a674eda5a6cac4;hpb=9ff75d089614cce1cfa8c88344ace47698258bfa;p=ghc-hetmet.git diff --git a/ghc/rts/Schedule.h b/ghc/rts/Schedule.h index d0c3f99..00b4de1 100644 --- a/ghc/rts/Schedule.h +++ b/ghc/rts/Schedule.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: Schedule.h,v 1.18 2000/04/14 15:18:07 sewardj Exp $ + * $Id: Schedule.h,v 1.22 2001/03/22 03:51:10 hwloidl Exp $ * * (c) The GHC Team 1998-1999 * @@ -32,7 +32,6 @@ void exitScheduler( void ); void startTasks( void ); #endif - //@cindex awakenBlockedQueue /* awakenBlockedQueue() * @@ -85,6 +84,15 @@ void raiseAsync(StgTSO *tso, StgClosure *exception); */ void awaitEvent(rtsBool wait); /* In Select.c */ +/* wakeUpSleepingThreads(nat ticks) + * + * Wakes up any sleeping threads whose timers have expired. + * + * Called from STG : NO + * Locks assumed : sched_mutex + */ +rtsBool wakeUpSleepingThreads(nat); /* In Select.c */ + // ToDo: check whether all fcts below are used in the SMP version, too //@cindex awaken_blocked_queue #if defined(GRAN) @@ -112,7 +120,9 @@ void initThread(StgTSO *tso, nat stack_size); extern nat context_switch; extern rtsBool interrupted; -extern nat ticks_since_select; +/* In Select.c */ +extern nat timestamp; +extern nat ticks_since_timestamp; //@cindex Capability /* Capability type @@ -139,6 +149,7 @@ extern Capability MainRegTable; #else extern StgTSO *run_queue_hd, *run_queue_tl; extern StgTSO *blocked_queue_hd, *blocked_queue_tl; +extern StgTSO *sleeping_queue; #endif /* Linked list of all threads. */ extern StgTSO *all_threads; @@ -186,21 +197,15 @@ void printThreadStatus(StgTSO *tso); void printAllThreads(void); #endif void print_bq (StgClosure *node); +#if defined(PAR) +void print_bqe (StgBlockingQueueElement *bqe); +#endif /* ----------------------------------------------------------------------------- * Some convenient macros... */ -/* this is the NIL ptr for a TSO queue (e.g. runnable queue) */ -#define END_TSO_QUEUE ((StgTSO *)(void*)&END_TSO_QUEUE_closure) -/* this is the NIL ptr for a list CAFs */ -#define END_ECAF_LIST ((StgCAF *)(void*)&END_TSO_QUEUE_closure) -#if defined(PAR) || defined(GRAN) -/* this is the NIL ptr for a blocking queue */ -# define END_BQ_QUEUE ((StgBlockingQueueElement *)(void*)&END_TSO_QUEUE_closure) -/* this is the NIL ptr for a blocked fetch queue (as in PendingFetches in GUM) */ -# define END_BF_QUEUE ((StgBlockedFetch *)(void*)&END_TSO_QUEUE_closure) -#endif +/* END_TSO_QUEUE and friends now defined in includes/StgMiscClosures.h */ //@cindex APPEND_TO_RUN_QUEUE /* Add a thread to the end of the run queue. @@ -267,6 +272,11 @@ void print_bq (StgClosure *node); #define THREAD_RUNNABLE() /* nothing */ #endif +//@cindex EMPTY_RUN_QUEUE +/* Check whether the run queue is empty i.e. the PE is idle + */ +#define EMPTY_RUN_QUEUE() (run_queue_hd == END_TSO_QUEUE) + //@node Index, , Some convenient macros //@subsection Index