diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-02-17 22:21:44 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-02-17 22:21:44 +0000 |
commit | 010192dd9fcfe40b82ca7595a732ed3ffbe9fdc1 (patch) | |
tree | 0bf11736eba94f9f997f0aaa7a59d97d3cb4470f /cpukit/score/include | |
parent | 2011-02-17 Joel Sherrill <joel.sherrill@oarcorp.com> (diff) | |
download | rtems-010192dd9fcfe40b82ca7595a732ed3ffbe9fdc1.tar.bz2 |
2011-02-17 Joel Sherrill <joel.sherrill@oarcorp.com>
* sapi/include/confdefs.h, sapi/include/rtems/config.h,
score/include/rtems/score/scheduler.h,
score/include/rtems/score/schedulerpriority.h,
score/inline/rtems/score/scheduler.inl,
score/inline/rtems/score/schedulerpriority.inl,
score/src/scheduler.c, score/src/schedulerpriority.c,
score/src/schedulerpriorityblock.c,
score/src/schedulerpriorityschedule.c,
score/src/schedulerprioritythreadschedulerallocate.c,
score/src/schedulerprioritythreadschedulerfree.c,
score/src/schedulerprioritythreadschedulerupdate.c,
score/src/schedulerpriorityunblock.c,
score/src/schedulerpriorityyield.c, score/src/threadchangepriority.c,
score/src/threadclearstate.c, score/src/threadclose.c,
score/src/threadinitialize.c, score/src/threadready.c,
score/src/threadresume.c, score/src/threadsetpriority.c,
score/src/threadsetstate.c, score/src/threadsuspend.c: Simplify the
pluggable scheduler interface. Its configuration made a table
of available schedulers and set a pointer to one of the.
This was heavy handed since you can only use one scheduler
in an application. This configuration mechanism resulted in a
scheduler pointer being passed around when you could put all
scheduler configuration in an initialized structure.
Diffstat (limited to 'cpukit/score/include')
-rw-r--r-- | cpukit/score/include/rtems/score/scheduler.h | 36 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/schedulerpriority.h | 50 |
2 files changed, 46 insertions, 40 deletions
diff --git a/cpukit/score/include/rtems/score/scheduler.h b/cpukit/score/include/rtems/score/scheduler.h index 391dc92992..2ca6c4a0fe 100644 --- a/cpukit/score/include/rtems/score/scheduler.h +++ b/cpukit/score/include/rtems/score/scheduler.h @@ -7,6 +7,7 @@ /* * Copyright (C) 2010 Gedare Bloom. + * Copyright (C) 2011 On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at @@ -35,15 +36,6 @@ extern "C" { */ /**@{*/ -/* - * These defines are used to set the scheduler_policy value. The values - * must correspond directly with the order of the fields in the scheduler - * table (Scheduler_Table_entry), because the Configuration.scheduler_policy - * field is used to index the scheduler table. - */ -#define _Scheduler_USER (0) -#define _Scheduler_PRIORITY (1) - typedef struct Scheduler_Control_struct Scheduler_Control; /* @@ -54,9 +46,6 @@ typedef struct { void ( *scheduler_init )( Scheduler_Control * ); } Scheduler_Table_entry; -/* instantiated and initialized in confdefs.h */ -extern const Scheduler_Table_entry _Scheduler_Table[]; - /** * The following Scheduler_Per_thread_xxx structures are used to * hold per-thread data used by the scheduler. Thread_Control->scheduler is a @@ -82,26 +71,29 @@ typedef struct { */ typedef struct { /** Implements the scheduling decision logic (policy). */ - void ( *schedule ) ( Scheduler_Control * ); + void ( *initialize )(void); + + /** Implements the scheduling decision logic (policy). */ + void ( *schedule )(void); /** Voluntarily yields the processor per the scheduling policy. */ - void ( *yield ) ( Scheduler_Control * ); + void ( *yield )(void); /** Removes the given thread from scheduling decisions. */ - void ( *block ) ( Scheduler_Control *, Thread_Control * ); + void ( *block )(Thread_Control *); /** Adds the given thread to scheduling decisions. */ - void ( *unblock ) ( Scheduler_Control *, Thread_Control * ); + void ( *unblock )(Thread_Control *); /** allocates the scheduler field of the given thread */ - void * ( *scheduler_allocate ) ( Scheduler_Control *, Thread_Control * ); + void * ( *scheduler_allocate )(Thread_Control *); /** frees the scheduler field of the given thread */ - void ( *scheduler_free ) ( Scheduler_Control *, Thread_Control * ); + void ( *scheduler_free )(Thread_Control *); /** updates the scheduler field of the given thread -- primarily used * when changing the thread's priority. */ - void ( *scheduler_update ) ( Scheduler_Control *, Thread_Control * ); + void ( *scheduler_update )(Thread_Control *); } Scheduler_Operations; /** @@ -123,7 +115,7 @@ struct Scheduler_Control_struct { } Ready_queues; /** The jump table for scheduler-specific functions */ - Scheduler_Operations Operations; + Scheduler_Operations Operations; }; /** @@ -131,8 +123,10 @@ struct Scheduler_Control_struct { * scheduler. * * @note Can we make this per-cpu? then _Scheduler will be a macro. + * + * @note This is instantiated and initialized in confdefs.h. */ -SCORE_EXTERN Scheduler_Control _Scheduler; +extern Scheduler_Control _Scheduler; /** * This routine initializes the scheduler to the policy chosen by the user diff --git a/cpukit/score/include/rtems/score/schedulerpriority.h b/cpukit/score/include/rtems/score/schedulerpriority.h index 67ef6b9e93..162cb7011a 100644 --- a/cpukit/score/include/rtems/score/schedulerpriority.h +++ b/cpukit/score/include/rtems/score/schedulerpriority.h @@ -7,6 +7,7 @@ /* * Copryight (c) 2010 Gedare Bloom. + * Copyright (C) 2011 On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at @@ -35,11 +36,24 @@ extern "C" { /**@{*/ /** + * Entry points for Scheduler Priority + */ +#define SCHEDULER_PRIORITY_ENTRY_POINTS \ + { \ + .initialize = _Scheduler_priority_Initialize, \ + .schedule = _Scheduler_priority_Schedule, \ + .yield = _Scheduler_priority_Yield, \ + .block = _Scheduler_priority_Block, \ + .unblock = _Scheduler_priority_Unblock, \ + .scheduler_allocate = _Scheduler_priority_Thread_scheduler_allocate, \ + .scheduler_free = _Scheduler_priority_Thread_scheduler_free, \ + .scheduler_update = _Scheduler_priority_Thread_scheduler_update \ + } + +/** * This routine initializes the priority scheduler. */ -void _Scheduler_priority_Initialize( - Scheduler_Control *the_scheduler -); +void _Scheduler_priority_Initialize(void); /** * This routine removes @a the_thread from the scheduling decision, @@ -48,32 +62,27 @@ void _Scheduler_priority_Initialize( * a new heir thread. */ void _Scheduler_priority_Block( - Scheduler_Control *the_scheduler, - Thread_Control *the_thread + Thread_Control *the_thread ); /** * This kernel routine sets the heir thread to be the next ready thread * by invoking the_scheduler->ready_queue->operations->first(). */ -void _Scheduler_priority_Schedule( - Scheduler_Control *the_scheduler -); +void _Scheduler_priority_Schedule(void); /** * This routine allocates @a the_thread->scheduler. */ void * _Scheduler_priority_Thread_scheduler_allocate( - Scheduler_Control *the_scheduler, - Thread_Control *the_thread + Thread_Control *the_thread ); /** * This routine frees @a the_thread->scheduler. */ void _Scheduler_priority_Thread_scheduler_free( - Scheduler_Control *the_scheduler, - Thread_Control *the_thread + Thread_Control *the_thread ); /** @@ -81,8 +90,7 @@ void _Scheduler_priority_Thread_scheduler_free( * structures and thread state */ void _Scheduler_priority_Thread_scheduler_update( - Scheduler_Control *the_scheduler, - Thread_Control *the_thread + Thread_Control *the_thread ); /** @@ -91,17 +99,21 @@ void _Scheduler_priority_Thread_scheduler_update( * updates any appropriate scheduling variables, for example the heir thread. */ void _Scheduler_priority_Unblock( - Scheduler_Control *the_scheduler, - Thread_Control *the_thread + Thread_Control *the_thread ); /** * This routine is invoked when a thread wishes to voluntarily * transfer control of the processor to another thread in the queue. + * + * This routine will remove the running THREAD from the ready queue + * and place it immediately at the rear of this chain. Reset timeslice + * and yield the processor functions both use this routine, therefore if + * reset is true and this is the only thread on the queue then the + * timeslice counter is reset. The heir THREAD will be updated if the + * running is also the currently the heir. */ -void _Scheduler_priority_Yield( - Scheduler_Control *the_scheduler -); +void _Scheduler_priority_Yield( void ); #ifndef __RTEMS_APPLICATION__ #include <rtems/score/schedulerpriority.inl> |