forked from Imagelibrary/rtems
2009-09-11 Joel Sherrill <joel.sherrill@OARcorp.com>
* score/include/rtems/score/thread.h, score/src/threadhandler.c, score/src/threadinitialize.c, score/src/threadtickletimeslice.c: Disable thread protocol and scheduling capabilities not exercised when POSIX or ITRON API is disabled.
This commit is contained in:
@@ -1,3 +1,10 @@
|
||||
2009-09-11 Joel Sherrill <joel.sherrill@OARcorp.com>
|
||||
|
||||
* score/include/rtems/score/thread.h, score/src/threadhandler.c,
|
||||
score/src/threadinitialize.c, score/src/threadtickletimeslice.c:
|
||||
Disable thread protocol and scheduling capabilities not exercised
|
||||
when POSIX or ITRON API is disabled.
|
||||
|
||||
2009-09-11 Joel Sherrill <joel.sherrill@OARcorp.com>
|
||||
|
||||
* score/include/rtems/score/object.h,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* COPYRIGHT (c) 1989-2008.
|
||||
* COPYRIGHT (c) 1989-2009.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
@@ -27,6 +27,15 @@
|
||||
*/
|
||||
/**@{*/
|
||||
|
||||
#if defined(RTEMS_POSIX_API) || defined(RTEMS_ITRON_API)
|
||||
#define RTEMS_SCORE_THREAD_ENABLE_EXHAUST_TIMESLICE
|
||||
#endif
|
||||
|
||||
#if defined(RTEMS_POSIX_API)
|
||||
#define RTEMS_SCORE_THREAD_ENABLE_SCHEDULER_CALLOUT
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@@ -139,8 +148,12 @@ typedef Thread ( *Thread_Entry_both_numeric_first )( Thread_Entry_numeric_type,
|
||||
typedef enum {
|
||||
THREAD_CPU_BUDGET_ALGORITHM_NONE,
|
||||
THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE,
|
||||
THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE,
|
||||
THREAD_CPU_BUDGET_ALGORITHM_CALLOUT
|
||||
#if defined(RTEMS_SCORE_THREAD_ENABLE_EXHAUST_TIMESLICE)
|
||||
THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE,
|
||||
#endif
|
||||
#if defined(RTEMS_SCORE_THREAD_ENABLE_SCHEDULER_CALLOUT)
|
||||
THREAD_CPU_BUDGET_ALGORITHM_CALLOUT
|
||||
#endif
|
||||
} Thread_CPU_budget_algorithms;
|
||||
|
||||
/** This type defines the Thread Control Block structure.
|
||||
|
||||
@@ -149,12 +149,15 @@ void _Thread_Handler( void )
|
||||
(*(Thread_Entry_numeric) executing->Start.entry_point)(
|
||||
executing->Start.numeric_argument
|
||||
);
|
||||
} else if ( executing->Start.prototype == THREAD_START_POINTER ) {
|
||||
executing->Wait.return_argument =
|
||||
(*(Thread_Entry_pointer) executing->Start.entry_point)(
|
||||
executing->Start.pointer_argument
|
||||
);
|
||||
}
|
||||
#if defined(RTEMS_POSIX_API)
|
||||
else if ( executing->Start.prototype == THREAD_START_POINTER ) {
|
||||
executing->Wait.return_argument =
|
||||
(*(Thread_Entry_pointer) executing->Start.entry_point)(
|
||||
executing->Start.pointer_argument
|
||||
);
|
||||
}
|
||||
#endif
|
||||
#if defined(FUNCTIONALITY_NOT_CURRENTLY_USED_BY_ANY_API)
|
||||
else if ( executing->Start.prototype == THREAD_START_BOTH_POINTER_FIRST ) {
|
||||
executing->Wait.return_argument =
|
||||
|
||||
@@ -166,11 +166,15 @@ bool _Thread_Initialize(
|
||||
case THREAD_CPU_BUDGET_ALGORITHM_NONE:
|
||||
case THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE:
|
||||
break;
|
||||
case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE:
|
||||
the_thread->cpu_time_budget = _Thread_Ticks_per_timeslice;
|
||||
break;
|
||||
case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT:
|
||||
break;
|
||||
#if defined(RTEMS_SCORE_THREAD_ENABLE_EXHAUST_TIMESLICE)
|
||||
case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE:
|
||||
the_thread->cpu_time_budget = _Thread_Ticks_per_timeslice;
|
||||
break;
|
||||
#endif
|
||||
#if defined(RTEMS_SCORE_THREAD_ENABLE_SCHEDULER_CALLOUT)
|
||||
case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT:
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
the_thread->Start.isr_level = isr_level;
|
||||
|
||||
@@ -76,16 +76,20 @@ void _Thread_Tickle_timeslice( void )
|
||||
break;
|
||||
|
||||
case THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE:
|
||||
case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE:
|
||||
#if defined(RTEMS_SCORE_THREAD_ENABLE_EXHAUST_TIMESLICE)
|
||||
case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE:
|
||||
#endif
|
||||
if ( (int)(--executing->cpu_time_budget) <= 0 ) {
|
||||
_Thread_Reset_timeslice();
|
||||
executing->cpu_time_budget = _Thread_Ticks_per_timeslice;
|
||||
}
|
||||
break;
|
||||
|
||||
case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT:
|
||||
if ( --executing->cpu_time_budget == 0 )
|
||||
(*executing->budget_callout)( executing );
|
||||
break;
|
||||
#if defined(RTEMS_SCORE_THREAD_ENABLE_SCHEDULER_CALLOUT)
|
||||
case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT:
|
||||
if ( --executing->cpu_time_budget == 0 )
|
||||
(*executing->budget_callout)( executing );
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user