summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src/threadinitialize.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-12-09 14:48:34 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2020-02-12 09:08:36 +0100
commit01d59443b06ab351039cbc63a688cfa87f196ea0 (patch)
tree2044378caa3adc38cb494405d5618731f3686de2 /cpukit/score/src/threadinitialize.c
parentscore: Add _Stack_Extend_size() (diff)
downloadrtems-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.c53
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
*/