X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FSchedule.h;h=b81087d9a2f1910f76b90c2a18ca607a9f5fcad3;hb=4746806f20ee36532564c9ff691cdcb0da190fd2;hp=78b7a60bc79f7b9c14d82ad3c01f07b03fbf8dd1;hpb=dd4c28a9c706cce09ecc2c6f532969efa925532f;p=ghc-hetmet.git diff --git a/ghc/rts/Schedule.h b/ghc/rts/Schedule.h index 78b7a60..b81087d 100644 --- a/ghc/rts/Schedule.h +++ b/ghc/rts/Schedule.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: Schedule.h,v 1.17 2000/03/31 03:09:36 hwloidl Exp $ + * $Id: Schedule.h,v 1.25 2001/11/22 14:25:12 simonmar Exp $ * * (c) The GHC Team 1998-1999 * @@ -84,6 +84,24 @@ 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 */ + +/* GetRoots(evac_fn f) + * + * Call f() for each root known to the scheduler. + * + * Called from STG : NO + * Locks assumed : ???? + */ +void GetRoots(evac_fn); + // ToDo: check whether all fcts below are used in the SMP version, too //@cindex awaken_blocked_queue #if defined(GRAN) @@ -111,12 +129,8 @@ void initThread(StgTSO *tso, nat stack_size); extern nat context_switch; extern rtsBool interrupted; -extern nat ticks_since_select; - -//@cindex Capability -/* Capability type - */ -typedef StgRegTable Capability; +/* In Select.c */ +extern nat timestamp; /* Free capability list. * Locks required: sched_mutex. @@ -125,7 +139,7 @@ typedef StgRegTable Capability; extern Capability *free_capabilities; extern nat n_free_capabilities; #else -extern Capability MainRegTable; +extern Capability MainCapability; #endif /* Thread queues. @@ -138,6 +152,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; @@ -185,21 +200,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_CAF_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. @@ -266,6 +275,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