summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/score/src')
-rw-r--r--cpukit/score/src/thread.c27
-rw-r--r--cpukit/score/src/threadstackallocate.c33
-rw-r--r--cpukit/score/src/threadstackfree.c8
3 files changed, 29 insertions, 39 deletions
diff --git a/cpukit/score/src/thread.c b/cpukit/score/src/thread.c
index 3736f6eda8..613ef77e92 100644
--- a/cpukit/score/src/thread.c
+++ b/cpukit/score/src/thread.c
@@ -49,30 +49,29 @@
void _Thread_Handler_initialization(void)
{
- uint32_t ticks_per_timeslice;
- uint32_t maximum_extensions;
+ uint32_t ticks_per_timeslice =
+ rtems_configuration_get_ticks_per_timeslice();
+ uint32_t maximum_extensions =
+ rtems_configuration_get_maximum_extensions();
+ rtems_stack_allocate_init_hook stack_allocate_init_hook =
+ rtems_configuration_get_stack_allocate_init_hook();
uint32_t maximum_internal_threads;
#if defined(RTEMS_MULTIPROCESSING)
- uint32_t maximum_proxies;
+ uint32_t maximum_proxies =
+ _Configuration_MP_table->maximum_proxies;
#endif
- ticks_per_timeslice = Configuration.ticks_per_timeslice;
- maximum_extensions = Configuration.maximum_extensions;
- #if defined(RTEMS_MULTIPROCESSING)
- maximum_proxies = _Configuration_MP_table->maximum_proxies;
- #endif
- /*
- * BOTH stacks hooks must be set or both must be NULL.
- * Do not allow mixture.
- */
- if ( !( (!Configuration.stack_allocate_hook)
- == (!Configuration.stack_free_hook) ) )
+ if ( rtems_configuration_get_stack_allocate_hook() == NULL ||
+ rtems_configuration_get_stack_free_hook() == NULL)
_Internal_error_Occurred(
INTERNAL_ERROR_CORE,
true,
INTERNAL_ERROR_BAD_STACK_HOOK
);
+ if ( stack_allocate_init_hook != NULL )
+ (*stack_allocate_init_hook)( rtems_configuration_get_stack_space_size() );
+
_Thread_Dispatch_necessary = false;
_Thread_Executing = NULL;
_Thread_Heir = NULL;
diff --git a/cpukit/score/src/threadstackallocate.c b/cpukit/score/src/threadstackallocate.c
index 0989161f1e..9448328365 100644
--- a/cpukit/score/src/threadstackallocate.c
+++ b/cpukit/score/src/threadstackallocate.c
@@ -46,33 +46,24 @@ size_t _Thread_Stack_Allocate(
{
void *stack_addr = 0;
size_t the_stack_size;
+ rtems_stack_allocate_hook stack_allocate_hook =
+ rtems_configuration_get_stack_allocate_hook();
the_stack_size = _Stack_Ensure_minimum( stack_size );
/*
- * Call ONLY the CPU table stack allocate hook, _or_ the
- * the RTEMS workspace allocate. This is so the stack free
- * routine can call the correct deallocation routine.
+ * Pad the requested size so we allocate enough memory
+ * so the context initialization can align it properly. The address
+ * returned the workspace allocate must be directly stored in the
+ * stack control block because it is later used in the free sequence.
+ *
+ * Thus it is the responsibility of the CPU dependent code to
+ * get and keep the stack adjust factor, the stack alignment, and
+ * the context initialization sequence in sync.
*/
+ the_stack_size = _Stack_Adjust_size( the_stack_size );
- if ( Configuration.stack_allocate_hook ) {
- stack_addr = (*Configuration.stack_allocate_hook)( the_stack_size );
- } else {
-
- /*
- * First pad the requested size so we allocate enough memory
- * so the context initialization can align it properly. The address
- * returned the workspace allocate must be directly stored in the
- * stack control block because it is later used in the free sequence.
- *
- * Thus it is the responsibility of the CPU dependent code to
- * get and keep the stack adjust factor, the stack alignment, and
- * the context initialization sequence in sync.
- */
-
- the_stack_size = _Stack_Adjust_size( the_stack_size );
- stack_addr = _Workspace_Allocate( the_stack_size );
- }
+ stack_addr = (*stack_allocate_hook)( the_stack_size );
if ( !stack_addr )
the_stack_size = 0;
diff --git a/cpukit/score/src/threadstackfree.c b/cpukit/score/src/threadstackfree.c
index 64e0278e1b..926c1e9eb1 100644
--- a/cpukit/score/src/threadstackfree.c
+++ b/cpukit/score/src/threadstackfree.c
@@ -41,6 +41,9 @@ void _Thread_Stack_Free(
Thread_Control *the_thread
)
{
+ rtems_stack_free_hook stack_free_hook =
+ rtems_configuration_get_stack_free_hook();
+
#if defined(RTEMS_SCORE_THREAD_ENABLE_USER_PROVIDED_STACK_VIA_API)
/*
* If the API provided the stack space, then don't free it.
@@ -55,8 +58,5 @@ void _Thread_Stack_Free(
* routine properly matches the allocation of the stack.
*/
- if ( Configuration.stack_free_hook )
- (*Configuration.stack_free_hook)( the_thread->Start.Initial_stack.area );
- else
- _Workspace_Free( the_thread->Start.Initial_stack.area );
+ (*stack_free_hook)( the_thread->Start.Initial_stack.area );
}