summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2011-02-17 22:21:44 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2011-02-17 22:21:44 +0000
commit010192dd9fcfe40b82ca7595a732ed3ffbe9fdc1 (patch)
tree0bf11736eba94f9f997f0aaa7a59d97d3cb4470f /cpukit/score/include
parent2011-02-17 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-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.h36
-rw-r--r--cpukit/score/include/rtems/score/schedulerpriority.h50
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>