From 54f35888311f36baaefd90b1f31e4150e3db5465 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 25 Oct 2018 10:54:12 +0200 Subject: posix: Provide threads by default Update #2514. --- cpukit/posix/src/psxtransschedparam.c | 6 ++---- cpukit/posix/src/pthread.c | 10 ++++++++-- cpukit/posix/src/pthreadcreate.c | 20 +++++++++++++------- cpukit/posix/src/pthreadsetschedparam.c | 16 ++++++++++++++-- 4 files changed, 37 insertions(+), 15 deletions(-) (limited to 'cpukit/posix') diff --git a/cpukit/posix/src/psxtransschedparam.c b/cpukit/posix/src/psxtransschedparam.c index 614c5fb71f..587788cabd 100644 --- a/cpukit/posix/src/psxtransschedparam.c +++ b/cpukit/posix/src/psxtransschedparam.c @@ -30,10 +30,8 @@ int _POSIX_Thread_Translate_to_sched_policy( switch ( budget_algorithm ) { case THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE: return SCHED_OTHER; -#if defined(RTEMS_POSIX_API) case THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE: return SCHED_RR; -#endif case THREAD_CPU_BUDGET_ALGORITHM_CALLOUT: return SCHED_SPORADIC; default: @@ -62,13 +60,12 @@ int _POSIX_Thread_Translate_sched_param( return 0; } -#if defined(RTEMS_POSIX_API) if ( policy == SCHED_RR ) { *budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_EXHAUST_TIMESLICE; return 0; } -#endif +#if defined(RTEMS_POSIX_API) if ( policy == SCHED_SPORADIC ) { if ( (param->sched_ss_repl_period.tv_sec == 0) && (param->sched_ss_repl_period.tv_nsec == 0) ) @@ -86,6 +83,7 @@ int _POSIX_Thread_Translate_sched_param( *budget_callout = _POSIX_Threads_Sporadic_budget_callout; return 0; } +#endif return EINVAL; } diff --git a/cpukit/posix/src/pthread.c b/cpukit/posix/src/pthread.c index da31252063..0a790f9371 100644 --- a/cpukit/posix/src/pthread.c +++ b/cpukit/posix/src/pthread.c @@ -34,7 +34,9 @@ #include #include #include +#if defined(RTEMS_POSIX_API) #include +#endif #include #include #include @@ -42,6 +44,7 @@ Thread_Information _POSIX_Threads_Information; +#if defined(RTEMS_POSIX_API) void _POSIX_Threads_Sporadic_timer( Watchdog_Control *watchdog ) { POSIX_API_Control *api; @@ -144,6 +147,7 @@ static void _POSIX_Threads_Terminate_extension( Thread_Control *executing ) _Watchdog_Per_CPU_remove_ticks( &api->Sporadic.Timer ); _Thread_State_release( executing, &lock_context ); } +#endif /* * _POSIX_Threads_Exitted_extension @@ -164,9 +168,11 @@ static void _POSIX_Threads_Exitted_extension( User_extensions_Control _POSIX_Threads_User_extensions = { .Callouts = { +#if defined(RTEMS_POSIX_API) .thread_create = _POSIX_Threads_Create_extension, - .thread_exitted = _POSIX_Threads_Exitted_extension, - .thread_terminate = _POSIX_Threads_Terminate_extension + .thread_terminate = _POSIX_Threads_Terminate_extension, +#endif + .thread_exitted = _POSIX_Threads_Exitted_extension } }; diff --git a/cpukit/posix/src/pthreadcreate.c b/cpukit/posix/src/pthreadcreate.c index 46fe1e7412..39a241350f 100644 --- a/cpukit/posix/src/pthreadcreate.c +++ b/cpukit/posix/src/pthreadcreate.c @@ -62,10 +62,8 @@ int pthread_create( }; const pthread_attr_t *the_attr; int normal_prio; - int low_prio; bool valid; Priority_Control core_normal_prio; - Priority_Control core_low_prio; Thread_CPU_budget_algorithms budget_algorithm; Thread_CPU_budget_algorithm_callout budget_callout; bool is_fp; @@ -73,14 +71,18 @@ int pthread_create( Thread_Control *the_thread; Thread_Control *executing; const Scheduler_Control *scheduler; - POSIX_API_Control *api; - const POSIX_API_Control *executing_api; int schedpolicy = SCHED_RR; struct sched_param schedparam; size_t stacksize; Objects_Name name; int error; ISR_lock_Context lock_context; +#if defined(RTEMS_POSIX_API) + int low_prio; + Priority_Control core_low_prio; + POSIX_API_Control *api; + const POSIX_API_Control *executing_api; +#endif if ( !start_routine ) return EFAULT; @@ -167,6 +169,7 @@ int pthread_create( return EINVAL; } +#if defined(RTEMS_POSIX_API) if ( schedpolicy == SCHED_SPORADIC ) { low_prio = schedparam.sched_ss_low_priority; } else { @@ -177,6 +180,7 @@ int pthread_create( if ( !valid ) { return EINVAL; } +#endif if ( the_attr->affinityset == NULL ) { return EINVAL; @@ -242,6 +246,10 @@ int pthread_create( return EINVAL; } + the_thread->was_created_with_inherited_scheduler = + ( the_attr->inheritsched == PTHREAD_INHERIT_SCHED ); + +#if defined(RTEMS_POSIX_API) /* * finish initializing the per API structure */ @@ -250,9 +258,6 @@ int pthread_create( api->signals_unblocked = executing_api->signals_unblocked; - the_thread->was_created_with_inherited_scheduler = - ( the_attr->inheritsched == PTHREAD_INHERIT_SCHED ); - _Priority_Node_set_priority( &api->Sporadic.Low_priority, core_low_prio ); api->Sporadic.sched_ss_repl_period = the_attr->schedparam.sched_ss_repl_period; @@ -264,6 +269,7 @@ int pthread_create( if ( schedpolicy == SCHED_SPORADIC ) { _POSIX_Threads_Sporadic_timer( &api->Sporadic.Timer ); } +#endif /* * POSIX threads are allocated and started in one operation. diff --git a/cpukit/posix/src/pthreadsetschedparam.c b/cpukit/posix/src/pthreadsetschedparam.c index 7c5b6f109d..8d87620d93 100644 --- a/cpukit/posix/src/pthreadsetschedparam.c +++ b/cpukit/posix/src/pthreadsetschedparam.c @@ -40,12 +40,14 @@ static int _POSIX_Set_sched_param( ) { const Scheduler_Control *scheduler; - POSIX_API_Control *api; int normal_prio; - int low_prio; bool valid; Priority_Control core_normal_prio; +#if defined(RTEMS_POSIX_API) + POSIX_API_Control *api; + int low_prio; Priority_Control core_low_prio; +#endif normal_prio = param->sched_priority; @@ -56,6 +58,7 @@ static int _POSIX_Set_sched_param( return EINVAL; } +#if defined(RTEMS_POSIX_API) if ( policy == SCHED_SPORADIC ) { low_prio = param->sched_ss_low_priority; } else { @@ -70,9 +73,11 @@ static int _POSIX_Set_sched_param( api = the_thread->API_Extensions[ THREAD_API_POSIX ]; _Watchdog_Per_CPU_remove_ticks( &api->Sporadic.Timer ); +#endif _Priority_Node_set_priority( &the_thread->Real_priority, core_normal_prio ); +#if defined(RTEMS_POSIX_API) if ( _Priority_Node_is_active( &api->Sporadic.Low_priority ) ) { _Thread_Priority_add( the_thread, @@ -86,17 +91,21 @@ static int _POSIX_Set_sched_param( ); _Priority_Node_set_inactive( &api->Sporadic.Low_priority ); } else { +#endif _Thread_Priority_changed( the_thread, &the_thread->Real_priority, false, queue_context ); +#if defined(RTEMS_POSIX_API) } +#endif the_thread->budget_algorithm = budget_algorithm; the_thread->budget_callout = budget_callout; +#if defined(RTEMS_POSIX_API) _Priority_Node_set_priority( &api->Sporadic.Low_priority, core_low_prio ); api->Sporadic.sched_ss_repl_period = param->sched_ss_repl_period; api->Sporadic.sched_ss_init_budget = param->sched_ss_init_budget; @@ -105,9 +114,12 @@ static int _POSIX_Set_sched_param( if ( policy == SCHED_SPORADIC ) { _POSIX_Threads_Sporadic_timer_insert( the_thread, api ); } else { +#endif the_thread->cpu_time_budget = rtems_configuration_get_ticks_per_timeslice(); +#if defined(RTEMS_POSIX_API) } +#endif return 0; } -- cgit v1.2.3