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/sapi | |
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/sapi')
-rw-r--r-- | cpukit/sapi/include/confdefs.h | 94 | ||||
-rw-r--r-- | cpukit/sapi/include/rtems/config.h | 6 |
2 files changed, 23 insertions, 77 deletions
diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/confdefs.h index 7f40275239..68cb95b540 100644 --- a/cpukit/sapi/include/confdefs.h +++ b/cpukit/sapi/include/confdefs.h @@ -26,7 +26,7 @@ */ /* - * COPYRIGHT (c) 1989-2010. + * COPYRIGHT (c) 1989-2011. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -521,6 +521,9 @@ rtems_fs_init_functions_t rtems_fs_init_helper = * This configures the maximum priority value that * a task may have. * + * The following applies to the data space requirements + * of the Priority Scheduler. + * * By reducing the number of priorities in a system, * the amount of RAM required by RTEMS can be significantly * reduced. RTEMS allocates a Chain_Control structure per @@ -540,8 +543,7 @@ rtems_fs_init_functions_t rtems_fs_init_helper = * + 127, 125 application priorities, 1536 bytes saved * + 255, 253 application priorities, 0 bytes saved * - * It is specified in terms of Classic API - * priority values. + * It is specified in terms of Classic API priority values. */ #ifndef CONFIGURE_MAXIMUM_PRIORITY #define CONFIGURE_MAXIMUM_PRIORITY PRIORITY_DEFAULT_MAXIMUM @@ -552,111 +554,60 @@ rtems_fs_init_functions_t rtems_fs_init_helper = * * The scheduler configuration allows an application to select the * scheduling policy to use. The supported configurations are: - * CONFIGURE_SCHEDULER_USER - * CONFIGURE_SCHEDULER_PRIORITY + * CONFIGURE_SCHEDULER_USER - user provided scheduler + * CONFIGURE_SCHEDULER_PRIORITY - Deterministic Priority Scheduler * * If no configuration is specified by the application, then * CONFIGURE_SCHEDULER_PRIORITY is assumed to be the default. * * An application can define its own scheduling policy by defining - * CONFIGURE_SCHEDULER_USER and CONFIGURE_SCHEDULER_ENTRY_USER to point - * to an initialization routine. Note: CONFIGURE_SCHEDULER_USER is not - * fully supported, since it has no per-thread field. - * - * To add a new scheduler: + * CONFIGURE_SCHEDULER_USER and the following: + * - CONFIGURE_SCHEDULER_ENTRY_POINTS + * - CONFIGURE_MEMORY_FOR_SCHEDULER - base memory + * - CONFIGURE_MEMORY_PER_TASK_FOR_SCHEDULER - per task memory */ #include <rtems/score/scheduler.h> #if defined(CONFIGURE_SCHEDULER_USER) && \ - !defined(CONFIGURE_SCHEDULER_ENTRY_USER) - #error "CONFIGURE_ERROR: CONFIGURE_SCHEDULER_USER without CONFIGURE_SCHEDULER_ENTRY_USER" -#endif - -/* enable all RTEMS-provided schedulers */ -#if defined(CONFIGURE_SCHEDULER_ALL) - #define CONFIGURE_SCHEDULER_PRIORITY + !defined(CONFIGURE_SCHEDULER_USER_ENTRY_POINTS) + #error "CONFIGURE_ERROR: CONFIGURE_SCHEDULER_USER requires CONFIGURE_SCHEDULER_USER_ENTRY_POINTS" #endif /* If no scheduler is specified, the priority scheduler is default. */ #if !defined(CONFIGURE_SCHEDULER_USER) && \ !defined(CONFIGURE_SCHEDULER_PRIORITY) #define CONFIGURE_SCHEDULER_PRIORITY - #define CONFIGURE_SCHEDULER_POLICY _Scheduler_PRIORITY -#endif - -/* - * If a user scheduler is specified and no policy is set, - * the user scheduler is the default policy. - */ -#if defined(CONFIGURE_SCHEDULER_USER) && \ - !defined(CONFIGURE_SCHEDULER_POLICY) - #define CONFIGURE_SCHEDULER_POLICY _Scheduler_USER #endif /* - * Check for priority scheduler next, as it is the default policy if there - * is no CONFIGURE_SCHEDULER_POLICY set and no USER scheduler provided. + * Is the Priority Scheduler is selected, then configure for it. */ #if defined(CONFIGURE_SCHEDULER_PRIORITY) #include <rtems/score/schedulerpriority.h> - #define CONFIGURE_SCHEDULER_ENTRY_PRIORITY { _Scheduler_priority_Initialize } - #if !defined(CONFIGURE_SCHEDULER_POLICY) - #define CONFIGURE_SCHEDULER_POLICY _Scheduler_PRIORITY - #endif + #define SCHEDULER_ENTRY_POINTS SCHEDULER_PRIORITY_ENTRY_POINTS /** * define the memory used by the priority scheduler */ - #define CONFIGURE_MEMORY_SCHEDULER_PRIORITY ( \ + #define CONFIGURE_MEMORY_FOR_SCHEDULER ( \ _Configure_From_workspace( \ ((CONFIGURE_MAXIMUM_PRIORITY+1) * sizeof(Chain_Control)) ) \ ) - #define CONFIGURE_MEMORY_PER_TASK_SCHEDULER_PRIORITY ( \ + #define CONFIGURE_MEMORY_PER_TASK_FOR_SCHEDULER ( \ _Configure_From_workspace(sizeof(Scheduler_priority_Per_thread)) ) #endif /* - * Set up the scheduler table. The scheduling code indexes this table to - * invoke the correct scheduling implementation. The scheduler to use is - * determined by the Configuration.scheduler_policy field, which is set - * by CONFIGURE_SCHEDULER_POLICY. If a particular scheduler is not enabled, - * an empty entry is included in its entry in the scheduler table. + * Set up the scheduler entry points table. The scheduling code uses + * this code to know which scheduler is configured by the user. */ - - /** - * An empty scheduler entry - */ - #define CONFIGURE_SCHEDULER_NULL { NULL } - #ifdef CONFIGURE_INIT - /* the table of available schedulers. */ - const Scheduler_Table_entry _Scheduler_Table[] = { - #if defined(CONFIGURE_SCHEDULER_USER) && \ - defined(CONFIGURE_SCHEDULER_ENTRY_USER) - CONFIGURE_SCHEDULER_ENTRY_USER, - #else - CONFIGURE_SCHEDULER_NULL, - #endif - #if defined(CONFIGURE_SCHEDULER_PRIORITY) && \ - defined(CONFIGURE_SCHEDULER_ENTRY_PRIORITY) - CONFIGURE_SCHEDULER_ENTRY_PRIORITY, - #else - CONFIGURE_SCHEDULER_NULL, - #endif + Scheduler_Control _Scheduler = { + .Ready_queues.priority = NULL, + .Operations = SCHEDULER_ENTRY_POINTS }; #endif -/** - * Define the memory overhead for the scheduler - */ -#define CONFIGURE_MEMORY_FOR_SCHEDULER ( \ - CONFIGURE_MEMORY_SCHEDULER_PRIORITY \ - ) - -#define CONFIGURE_MEMORY_PER_TASK_FOR_SCHEDULER ( \ - CONFIGURE_MEMORY_PER_TASK_SCHEDULER_PRIORITY \ - ) - /* * If you said the IDLE task was going to do application initialization * and didn't override the IDLE body, then something is amiss. @@ -2129,7 +2080,6 @@ rtems_fs_init_functions_t rtems_fs_init_helper = CONFIGURE_MAXIMUM_USER_EXTENSIONS, /* maximum dynamic extensions */ CONFIGURE_MICROSECONDS_PER_TICK, /* microseconds per clock tick */ CONFIGURE_TICKS_PER_TIMESLICE, /* ticks per timeslice quantum */ - CONFIGURE_SCHEDULER_POLICY, /* scheduling policy */ CONFIGURE_IDLE_TASK_BODY, /* user's IDLE task */ CONFIGURE_IDLE_TASK_STACK_SIZE, /* IDLE task stack size */ CONFIGURE_INTERRUPT_STACK_SIZE, /* interrupt stack size */ diff --git a/cpukit/sapi/include/rtems/config.h b/cpukit/sapi/include/rtems/config.h index 541bc9ddff..cdf33874d7 100644 --- a/cpukit/sapi/include/rtems/config.h +++ b/cpukit/sapi/include/rtems/config.h @@ -6,7 +6,7 @@ * This include file contains the table of user defined configuration * parameters. * - * COPYRIGHT (c) 1989-2008. + * COPYRIGHT (c) 1989-2011. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -118,10 +118,6 @@ typedef struct { */ uint32_t ticks_per_timeslice; - /** This field specifies the scheduling policy to use. - */ - uint32_t scheduler_policy; - /** This element points to the BSP's optional idle task which may override * the default one provided with RTEMS. */ |