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:
Joel Sherrill
2009-09-11 15:35:52 +00:00
parent c0e7fb79e0
commit 442eac699d
5 changed files with 49 additions and 18 deletions

View File

@@ -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,

View File

@@ -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.

View File

@@ -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 =

View File

@@ -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;

View File

@@ -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
}
}