score: Create scheduler implementation header

Move implementation specific parts of scheduler.h and scheduler.inl into
new header file schedulerimpl.h.  The scheduler.h contains now only the
application visible API.
This commit is contained in:
Sebastian Huber
2013-07-24 13:12:38 +02:00
parent f068384e3c
commit c6e21ee18f
28 changed files with 78 additions and 172 deletions

View File

@@ -21,16 +21,13 @@
#include <time.h> #include <time.h>
#include <errno.h> #include <errno.h>
#include <rtems/system.h> #include <rtems/seterr.h>
#include <rtems/score/isr.h> #include <rtems/score/schedulerimpl.h>
#include <rtems/score/scheduler.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/timespec.h>
#include <rtems/score/tod.h> #include <rtems/score/tod.h>
#include <rtems/score/watchdogimpl.h> #include <rtems/score/watchdogimpl.h>
#include <rtems/seterr.h>
#include <rtems/score/timespec.h>
/* /*
* 14.2.5 High Resolution Sleep, P1003.1b-1993, p. 269 * 14.2.5 High Resolution Sleep, P1003.1b-1993, p. 269
*/ */

View File

@@ -19,15 +19,10 @@
#endif #endif
#include <sched.h> #include <sched.h>
#include <errno.h>
#include <rtems/system.h> #include <rtems/score/percpu.h>
#include <rtems/score/scheduler.h> #include <rtems/score/schedulerimpl.h>
#include <rtems/score/tod.h> #include <rtems/score/threaddispatch.h>
#include <rtems/score/thread.h>
#include <rtems/seterr.h>
#include <rtems/posix/priorityimpl.h>
#include <rtems/posix/time.h>
int sched_yield( void ) int sched_yield( void )
{ {

View File

@@ -18,10 +18,8 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h>
#include <rtems/rtems/status.h>
#include <rtems/rtems/clock.h> #include <rtems/rtems/clock.h>
#include <rtems/score/isr.h> #include <rtems/score/schedulerimpl.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/tod.h> #include <rtems/score/tod.h>
#include <rtems/score/watchdogimpl.h> #include <rtems/score/watchdogimpl.h>

View File

@@ -18,12 +18,8 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h>
#include <rtems/rtems/status.h>
#include <rtems/rtems/support.h>
#include <rtems/score/isr.h>
#include <rtems/score/object.h>
#include <rtems/rtems/ratemonimpl.h> #include <rtems/rtems/ratemonimpl.h>
#include <rtems/score/schedulerimpl.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/watchdogimpl.h> #include <rtems/score/watchdogimpl.h>

View File

@@ -18,12 +18,8 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h>
#include <rtems/rtems/status.h>
#include <rtems/rtems/support.h>
#include <rtems/score/isr.h>
#include <rtems/score/object.h>
#include <rtems/rtems/ratemonimpl.h> #include <rtems/rtems/ratemonimpl.h>
#include <rtems/score/schedulerimpl.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/watchdogimpl.h> #include <rtems/score/watchdogimpl.h>

View File

@@ -18,13 +18,10 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h>
#include <rtems/rtems/status.h>
#include <rtems/rtems/support.h>
#include <rtems/score/isr.h>
#include <rtems/score/object.h>
#include <rtems/rtems/ratemonimpl.h> #include <rtems/rtems/ratemonimpl.h>
#include <rtems/score/schedulerimpl.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/tod.h>
#include <rtems/score/watchdogimpl.h> #include <rtems/score/watchdogimpl.h>
bool _Rate_monotonic_Get_status( bool _Rate_monotonic_Get_status(

View File

@@ -18,20 +18,9 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h>
#include <rtems/rtems/status.h>
#include <rtems/rtems/support.h>
#include <rtems/rtems/modes.h>
#include <rtems/score/object.h>
#include <rtems/score/scheduler.h>
#include <rtems/score/stack.h>
#include <rtems/score/states.h>
#include <rtems/rtems/tasksimpl.h> #include <rtems/rtems/tasksimpl.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/threadq.h> #include <rtems/score/schedulerimpl.h>
#include <rtems/score/tod.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/watchdogimpl.h> #include <rtems/score/watchdogimpl.h>
rtems_status_code rtems_task_wake_after( rtems_status_code rtems_task_wake_after(

View File

@@ -48,7 +48,8 @@
#include <rtems/score/mpci.h> #include <rtems/score/mpci.h>
#endif #endif
#include <rtems/score/priority.h> #include <rtems/score/priority.h>
#include <rtems/score/scheduler.h> #include <rtems/score/prioritybitmap.h>
#include <rtems/score/schedulerimpl.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/tod.h> #include <rtems/score/tod.h>
#include <rtems/score/userextimpl.h> #include <rtems/score/userextimpl.h>

View File

@@ -44,6 +44,7 @@ include_rtems_score_HEADERS += include/rtems/score/prioritybitmap.h
include_rtems_score_HEADERS += include/rtems/score/rbtree.h include_rtems_score_HEADERS += include/rtems/score/rbtree.h
include_rtems_score_HEADERS += include/rtems/score/rbtreeimpl.h include_rtems_score_HEADERS += include/rtems/score/rbtreeimpl.h
include_rtems_score_HEADERS += include/rtems/score/scheduler.h include_rtems_score_HEADERS += include/rtems/score/scheduler.h
include_rtems_score_HEADERS += include/rtems/score/schedulerimpl.h
include_rtems_score_HEADERS += include/rtems/score/schedulercbs.h include_rtems_score_HEADERS += include/rtems/score/schedulercbs.h
include_rtems_score_HEADERS += include/rtems/score/scheduleredf.h include_rtems_score_HEADERS += include/rtems/score/scheduleredf.h
include_rtems_score_HEADERS += include/rtems/score/schedulerpriority.h include_rtems_score_HEADERS += include/rtems/score/schedulerpriority.h
@@ -99,7 +100,6 @@ endif
## inline ## inline
include_rtems_score_HEADERS += inline/rtems/score/object.inl include_rtems_score_HEADERS += inline/rtems/score/object.inl
include_rtems_score_HEADERS += inline/rtems/score/prioritybitmap.inl include_rtems_score_HEADERS += inline/rtems/score/prioritybitmap.inl
include_rtems_score_HEADERS += inline/rtems/score/scheduler.inl
include_rtems_score_HEADERS += inline/rtems/score/states.inl include_rtems_score_HEADERS += inline/rtems/score/states.inl
include_rtems_score_HEADERS += inline/rtems/score/thread.inl include_rtems_score_HEADERS += inline/rtems/score/thread.inl
include_rtems_score_HEADERS += inline/rtems/score/threadq.inl include_rtems_score_HEADERS += inline/rtems/score/threadq.inl

View File

@@ -22,7 +22,6 @@
#include <rtems/score/percpu.h> #include <rtems/score/percpu.h>
#include <rtems/score/chain.h> #include <rtems/score/chain.h>
#include <rtems/score/priority.h> #include <rtems/score/priority.h>
#include <rtems/score/prioritybitmap.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@@ -126,29 +125,6 @@ typedef struct {
*/ */
extern Scheduler_Control _Scheduler; extern Scheduler_Control _Scheduler;
/**
* Macro testing whether @a p1 has lower priority than @a p2
* in the intuitive sense of priority.
*/
#define _Scheduler_Is_priority_lower_than( _p1, _p2 ) \
(_Scheduler_Priority_compare(_p1,_p2) < 0)
/**
* Macro testing whether @a p1 has higher priority than @a p2
* in the intuitive sense of priority.
*/
#define _Scheduler_Is_priority_higher_than( _p1, _p2 ) \
(_Scheduler_Priority_compare(_p1,_p2) > 0)
/**
* @brief Initializes the scheduler to the policy chosen by the user.
*
* This routine initializes the scheduler to the policy chosen by the user
* through confdefs, or to the priority scheduler with ready chains by
* default.
*/
void _Scheduler_Handler_initialization( void );
/** /**
* @brief Performs tick operations depending on the CPU budget algorithm for * @brief Performs tick operations depending on the CPU budget algorithm for
* each executing thread. * each executing thread.
@@ -168,10 +144,6 @@ void _Scheduler_default_Start_idle(
Per_CPU_Control *processor Per_CPU_Control *processor
); );
#ifndef __RTEMS_APPLICATION__
#include <rtems/score/scheduler.inl>
#endif
/**@}*/ /**@}*/
#ifdef __cplusplus #ifdef __cplusplus

View File

@@ -16,18 +16,29 @@
* http://www.rtems.com/license/LICENSE. * http://www.rtems.com/license/LICENSE.
*/ */
#ifndef _RTEMS_SCORE_SCHEDULER_H #ifndef _RTEMS_SCORE_SCHEDULERIMPL_H
# error "Never use <rtems/score/scheduler.inl> directly; include <rtems/score/scheduler.h> instead." #define _RTEMS_SCORE_SCHEDULERIMPL_H
#endif
#ifndef _RTEMS_SCORE_SCHEDULER_INL #include <rtems/score/scheduler.h>
#define _RTEMS_SCORE_SCHEDULER_INL
#ifdef __cplusplus
extern "C" {
#endif
/** /**
* @addtogroup ScoreScheduler * @addtogroup ScoreScheduler
*/ */
/**@{**/ /**@{**/
/**
* @brief Initializes the scheduler to the policy chosen by the user.
*
* This routine initializes the scheduler to the policy chosen by the user
* through confdefs, or to the priority scheduler with ready chains by
* default.
*/
void _Scheduler_Handler_initialization( void );
/** /**
* The preferred method to add a new scheduler is to define the jump table * The preferred method to add a new scheduler is to define the jump table
* entries and add a case to the _Scheduler_Initialize routine. * entries and add a case to the _Scheduler_Initialize routine.
@@ -226,7 +237,25 @@ RTEMS_INLINE_ROUTINE void _Scheduler_Start_idle(
( *_Scheduler.Operations.start_idle )( thread, processor ); ( *_Scheduler.Operations.start_idle )( thread, processor );
} }
/**
* Macro testing whether @a p1 has lower priority than @a p2
* in the intuitive sense of priority.
*/
#define _Scheduler_Is_priority_lower_than( _p1, _p2 ) \
(_Scheduler_Priority_compare(_p1,_p2) < 0)
/**
* Macro testing whether @a p1 has higher priority than @a p2
* in the intuitive sense of priority.
*/
#define _Scheduler_Is_priority_higher_than( _p1, _p2 ) \
(_Scheduler_Priority_compare(_p1,_p2) > 0)
/** @} */ /** @} */
#ifdef __cplusplus
}
#endif
#endif #endif
/* end of include file */ /* end of include file */

View File

@@ -159,6 +159,10 @@ $(PROJECT_INCLUDE)/rtems/score/scheduler.h: include/rtems/score/scheduler.h $(PR
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/scheduler.h $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/scheduler.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/scheduler.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/scheduler.h
$(PROJECT_INCLUDE)/rtems/score/schedulerimpl.h: include/rtems/score/schedulerimpl.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/schedulerimpl.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/schedulerimpl.h
$(PROJECT_INCLUDE)/rtems/score/schedulercbs.h: include/rtems/score/schedulercbs.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp) $(PROJECT_INCLUDE)/rtems/score/schedulercbs.h: include/rtems/score/schedulercbs.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/schedulercbs.h $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/schedulercbs.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/schedulercbs.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/schedulercbs.h
@@ -327,10 +331,6 @@ $(PROJECT_INCLUDE)/rtems/score/prioritybitmap.inl: inline/rtems/score/prioritybi
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/prioritybitmap.inl $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/prioritybitmap.inl
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/prioritybitmap.inl PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/prioritybitmap.inl
$(PROJECT_INCLUDE)/rtems/score/scheduler.inl: inline/rtems/score/scheduler.inl $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/scheduler.inl
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/scheduler.inl
$(PROJECT_INCLUDE)/rtems/score/states.inl: inline/rtems/score/states.inl $(PROJECT_INCLUDE)/rtems/score/$(dirstamp) $(PROJECT_INCLUDE)/rtems/score/states.inl: inline/rtems/score/states.inl $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/states.inl $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/states.inl
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/states.inl PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/states.inl

View File

@@ -21,6 +21,7 @@
#include <rtems/system.h> #include <rtems/system.h>
#include <rtems/score/isr.h> #include <rtems/score/isr.h>
#include <rtems/score/coremuteximpl.h> #include <rtems/score/coremuteximpl.h>
#include <rtems/score/schedulerimpl.h>
#include <rtems/score/states.h> #include <rtems/score/states.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/threadq.h> #include <rtems/score/threadq.h>

View File

@@ -18,9 +18,7 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h> #include <rtems/score/schedulerimpl.h>
#include <rtems/config.h>
#include <rtems/score/scheduler.h>
void _Scheduler_Handler_initialization(void) void _Scheduler_Handler_initialization(void)
{ {

View File

@@ -19,9 +19,8 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h>
#include <rtems/score/scheduler.h>
#include <rtems/score/schedulercbs.h> #include <rtems/score/schedulercbs.h>
#include <rtems/score/schedulerimpl.h>
#include <rtems/score/watchdogimpl.h> #include <rtems/score/watchdogimpl.h>
void _Scheduler_CBS_Unblock( void _Scheduler_CBS_Unblock(

View File

@@ -10,7 +10,7 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/score/scheduler.h> #include <rtems/score/schedulerimpl.h>
void _Scheduler_default_Start_idle( void _Scheduler_default_Start_idle(
Thread_Control *thread, Thread_Control *thread,

View File

@@ -19,8 +19,7 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h> #include <rtems/score/schedulerimpl.h>
#include <rtems/score/scheduler.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/smp.h> #include <rtems/score/smp.h>

View File

@@ -18,10 +18,9 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h>
#include <rtems/config.h>
#include <rtems/score/scheduler.h>
#include <rtems/score/scheduleredf.h> #include <rtems/score/scheduleredf.h>
#include <rtems/score/schedulerimpl.h>
#include <rtems/score/thread.h>
static int _Scheduler_EDF_RBTree_compare_function static int _Scheduler_EDF_RBTree_compare_function
( (

View File

@@ -19,6 +19,7 @@
#endif #endif
#include <rtems/score/scheduleredf.h> #include <rtems/score/scheduleredf.h>
#include <rtems/score/schedulerimpl.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
void _Scheduler_EDF_Unblock( void _Scheduler_EDF_Unblock(

View File

@@ -19,11 +19,9 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h>
#include <rtems/score/isr.h>
#include <rtems/score/scheduler.h>
#include <rtems/score/schedulerpriority.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/isr.h>
#include <rtems/score/schedulerimpl.h>
#include <rtems/score/threadq.h> #include <rtems/score/threadq.h>
void _Thread_Change_priority( void _Thread_Change_priority(

View File

@@ -18,18 +18,9 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h>
#include <rtems/score/apiext.h>
#include <rtems/score/context.h>
#include <rtems/score/interr.h>
#include <rtems/score/isr.h>
#include <rtems/score/object.h>
#include <rtems/score/priority.h>
#include <rtems/score/scheduler.h>
#include <rtems/score/states.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/threadq.h> #include <rtems/score/schedulerimpl.h>
#include <rtems/score/wkspace.h> #include <rtems/score/states.h>
void _Thread_Clear_state( void _Thread_Clear_state(
Thread_Control *the_thread, Thread_Control *the_thread,

View File

@@ -18,16 +18,9 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h>
#include <rtems/score/apiext.h>
#include <rtems/score/context.h>
#include <rtems/score/interr.h>
#include <rtems/score/isr.h>
#include <rtems/score/object.h>
#include <rtems/score/priority.h>
#include <rtems/score/scheduler.h>
#include <rtems/score/states.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/object.h>
#include <rtems/score/schedulerimpl.h>
#include <rtems/score/threaddispatch.h> #include <rtems/score/threaddispatch.h>
#include <rtems/score/threadq.h> #include <rtems/score/threadq.h>
#include <rtems/score/userextimpl.h> #include <rtems/score/userextimpl.h>

View File

@@ -17,18 +17,12 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h> #include <rtems/score/thread.h>
#include <rtems/config.h> #include <rtems/config.h>
#include <rtems/score/apiext.h>
#include <rtems/score/context.h>
#include <rtems/score/interr.h>
#include <rtems/score/isr.h>
#include <rtems/score/object.h> #include <rtems/score/object.h>
#include <rtems/score/priority.h> #include <rtems/score/priority.h>
#include <rtems/score/scheduler.h> #include <rtems/score/schedulerimpl.h>
#include <rtems/score/stackimpl.h> #include <rtems/score/stackimpl.h>
#include <rtems/score/states.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h> #include <rtems/score/threadq.h>
#include <rtems/score/userextimpl.h> #include <rtems/score/userextimpl.h>
#include <rtems/score/watchdogimpl.h> #include <rtems/score/watchdogimpl.h>

View File

@@ -18,18 +18,9 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h>
#include <rtems/score/apiext.h>
#include <rtems/score/context.h>
#include <rtems/score/interr.h>
#include <rtems/score/isr.h>
#include <rtems/score/object.h>
#include <rtems/score/priority.h>
#include <rtems/score/scheduler.h>
#include <rtems/score/states.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/threadq.h> #include <rtems/score/isr.h>
#include <rtems/score/wkspace.h> #include <rtems/score/schedulerimpl.h>
void _Thread_Ready( void _Thread_Ready(
Thread_Control *the_thread Thread_Control *the_thread

View File

@@ -18,9 +18,8 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h>
#include <rtems/score/scheduler.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/schedulerimpl.h>
void _Thread_Set_priority( void _Thread_Set_priority(
Thread_Control *the_thread, Thread_Control *the_thread,

View File

@@ -21,18 +21,9 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h>
#include <rtems/score/apiext.h>
#include <rtems/score/context.h>
#include <rtems/score/interr.h>
#include <rtems/score/isr.h>
#include <rtems/score/object.h>
#include <rtems/score/priority.h>
#include <rtems/score/scheduler.h>
#include <rtems/score/states.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/threadq.h> #include <rtems/score/isr.h>
#include <rtems/score/wkspace.h> #include <rtems/score/schedulerimpl.h>
void _Thread_Set_state( void _Thread_Set_state(
Thread_Control *the_thread, Thread_Control *the_thread,

View File

@@ -19,19 +19,9 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h>
#include <rtems/score/apiext.h>
#include <rtems/score/context.h>
#include <rtems/score/interr.h>
#include <rtems/score/isr.h>
#include <rtems/score/object.h>
#include <rtems/score/priority.h>
#include <rtems/score/scheduler.h>
#include <rtems/score/schedulerpriority.h>
#include <rtems/score/states.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/threadq.h> #include <rtems/score/isr.h>
#include <rtems/score/wkspace.h> #include <rtems/score/schedulerimpl.h>
void _Thread_Set_transient( void _Thread_Set_transient(
Thread_Control *the_thread Thread_Control *the_thread

View File

@@ -19,18 +19,10 @@
#include "config.h" #include "config.h"
#endif #endif
#include <rtems/system.h>
#include <rtems/score/apiext.h>
#include <rtems/score/context.h>
#include <rtems/score/interr.h>
#include <rtems/score/isr.h>
#include <rtems/score/object.h>
#include <rtems/score/priority.h>
#include <rtems/score/states.h>
#include <rtems/score/thread.h> #include <rtems/score/thread.h>
#include <rtems/score/threadq.h> #include <rtems/score/isr.h>
#include <rtems/score/schedulerimpl.h>
#include <rtems/score/userextimpl.h> #include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
bool _Thread_Start( bool _Thread_Start(
Thread_Control *the_thread, Thread_Control *the_thread,