diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-12-09 14:48:34 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2020-02-12 09:08:36 +0100 |
commit | 01d59443b06ab351039cbc63a688cfa87f196ea0 (patch) | |
tree | 2044378caa3adc38cb494405d5618731f3686de2 /cpukit/score/src/threadinitialize.c | |
parent | score: Add _Stack_Extend_size() (diff) | |
download | rtems-01d59443b06ab351039cbc63a688cfa87f196ea0.tar.bz2 |
score: Move thread stack allocation
Move thread stack allocation to caller side of _Thread_Initialize().
Update #3835.
Diffstat (limited to 'cpukit/score/src/threadinitialize.c')
-rw-r--r-- | cpukit/score/src/threadinitialize.c | 53 |
1 files changed, 19 insertions, 34 deletions
diff --git a/cpukit/score/src/threadinitialize.c b/cpukit/score/src/threadinitialize.c index a2bb09425d..6b9b6bef21 100644 --- a/cpukit/score/src/threadinitialize.c +++ b/cpukit/score/src/threadinitialize.c @@ -46,23 +46,6 @@ bool _Thread_Initialize( size_t scheduler_index; Per_CPU_Control *cpu = _Per_CPU_Get_by_index( 0 ); -#if defined(RTEMS_SMP) - if ( !config->is_preemptible && rtems_configuration_is_smp_enabled() ) { - return false; - } -#endif - -#if defined(RTEMS_SMP) || CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE - if ( - config->isr_level != 0 -#if CPU_ENABLE_ROBUST_THREAD_DISPATCH == FALSE - && rtems_configuration_is_smp_enabled() -#endif - ) { - return false; - } -#endif - memset( &the_thread->Join_queue, 0, @@ -76,26 +59,30 @@ bool _Thread_Initialize( (char *) the_thread + add_on->source_offset; } - /* Allocate the stack for this thread */ -#if defined(RTEMS_SCORE_THREAD_ENABLE_USER_PROVIDED_STACK_VIA_API) - if ( config->stack_area == NULL ) { -#endif - stack_size = _Stack_Ensure_minimum( config->stack_size ); - stack_size = _Stack_Extend_size( stack_size, config->is_fp ); - stack_area = _Stack_Allocate( stack_size ); + /* Set everything to perform the error case clean up */ + scheduler_index = 0; + the_thread->Start.allocated_stack = config->allocated_stack; - if ( stack_area == NULL ) { - return false; - } +#if defined(RTEMS_SMP) + if ( !config->is_preemptible && rtems_configuration_is_smp_enabled() ) { + goto failed; + } +#endif - the_thread->Start.allocated_stack = stack_area; -#if defined(RTEMS_SCORE_THREAD_ENABLE_USER_PROVIDED_STACK_VIA_API) - } else { - stack_area = config->stack_area; - stack_size = config->stack_size; +#if defined(RTEMS_SMP) || CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE + if ( + config->isr_level != 0 +#if CPU_ENABLE_ROBUST_THREAD_DISPATCH == FALSE + && rtems_configuration_is_smp_enabled() +#endif + ) { + goto failed; } #endif + stack_area = config->stack_area; + stack_size = config->stack_size; + /* Allocate floating-point context in stack area */ #if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE ) if ( config->is_fp ) { @@ -125,8 +112,6 @@ bool _Thread_Initialize( stack_size ); - scheduler_index = 0; - /* * Get thread queue heads */ |