Move the idle thread stack size configuration constant out of the configuration table.
Add THREAD_IDLE_STACK_SIZE_DEFAULT and use it to provide a default definition of the idle thread stack size constant. Update #3875. --- cpukit/headers.am | 1 + cpukit/include/rtems/confdefs.h | 5 ++- cpukit/include/rtems/config.h | 10 +---- cpukit/include/rtems/score/threadidledata.h | 65 +++++++++++++++++++++++++++++ cpukit/score/src/threadcreateidle.c | 3 +- 5 files changed, 74 insertions(+), 10 deletions(-) create mode 100644 cpukit/include/rtems/score/threadidledata.h diff --git a/cpukit/headers.am b/cpukit/headers.am index 244e435c62..351e942cea 100644 --- a/cpukit/headers.am +++ b/cpukit/headers.am @@ -389,6 +389,7 @@ include_rtems_score_HEADERS += include/rtems/score/status.h include_rtems_score_HEADERS += include/rtems/score/sysstate.h include_rtems_score_HEADERS += include/rtems/score/thread.h include_rtems_score_HEADERS += include/rtems/score/threaddispatch.h +include_rtems_score_HEADERS += include/rtems/score/threadidledata.h include_rtems_score_HEADERS += include/rtems/score/threadimpl.h include_rtems_score_HEADERS += include/rtems/score/threadmp.h include_rtems_score_HEADERS += include/rtems/score/threadq.h diff --git a/cpukit/include/rtems/confdefs.h b/cpukit/include/rtems/confdefs.h index b1c3a4a2d2..442ee7af92 100644 --- a/cpukit/include/rtems/confdefs.h +++ b/cpukit/include/rtems/confdefs.h @@ -1139,6 +1139,10 @@ extern "C" { #error "CONFIGURE_IDLE_TASK_STACK_SIZE less than CONFIGURE_MINIMUM_TASK_STACK_SIZE" #endif +#ifdef CONFIGURE_INIT + const size_t _Thread_Idle_stack_size = CONFIGURE_IDLE_TASK_STACK_SIZE; +#endif + /* * Interrupt stack configuration. * @@ -2633,7 +2637,6 @@ struct _reent *__getreent(void) const rtems_configuration_table Configuration = { CONFIGURE_EXECUTIVE_RAM_SIZE, /* required RTEMS workspace */ CONFIGURE_IDLE_TASK_BODY, /* user's IDLE task */ - CONFIGURE_IDLE_TASK_STACK_SIZE, /* IDLE task stack size */ #ifdef CONFIGURE_UNIFIED_WORK_AREAS /* true for unified work areas */ true, #else diff --git a/cpukit/include/rtems/config.h b/cpukit/include/rtems/config.h index 31a667a1d6..62804be41c 100644 --- a/cpukit/include/rtems/config.h +++ b/cpukit/include/rtems/config.h @@ -32,6 +32,7 @@ #include <rtems/score/memory.h> #include <rtems/score/stack.h> #include <rtems/score/userextdata.h> +#include <rtems/score/threadidledata.h> #include <rtems/score/watchdogticks.h> #include <rtems/rtems/config.h> #include <rtems/extension.h> @@ -92,13 +93,6 @@ typedef struct { */ void *(*idle_task)( uintptr_t ); - /** - * This field specifies the size of the IDLE task's stack. If less than or - * equal to the minimum stack size, then the IDLE task will have the minimum - * stack size. - */ - uint32_t idle_task_stack_size; - /** * @brief Specifies if a unified work area is used or not. * @@ -164,7 +158,7 @@ uint32_t rtems_configuration_get_maximum_extensions( void ); (Configuration.idle_task) #define rtems_configuration_get_idle_task_stack_size() \ - (Configuration.idle_task_stack_size) + (_Thread_Idle_stack_size) #define rtems_configuration_get_interrupt_stack_size() \ ((size_t) _ISR_Stack_size) diff --git a/cpukit/include/rtems/score/threadidledata.h b/cpukit/include/rtems/score/threadidledata.h new file mode 100644 index 0000000000..0011776ffa --- /dev/null +++ b/cpukit/include/rtems/score/threadidledata.h @@ -0,0 +1,65 @@ +/** + * @file + * + * @ingroup RTEMSScoreThread + * + * @brief Constants for the idle threads. + */ + +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _RTEMS_SCORE_THREADIDLEDATA_H +#define _RTEMS_SCORE_THREADIDLEDATA_H + +#include <rtems/score/basedefs.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup RTEMSScoreThread + * + * @{ + */ + +/** + * @brief The idle thread stack size in bytes. + * + * This constant is defined by the application configuration via + * <rtems/confdefs.h>. + */ +extern const size_t _Thread_Idle_stack_size; + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* _RTEMS_SCORE_THREADIDLEDATA_H */ diff --git a/cpukit/score/src/threadcreateidle.c b/cpukit/score/src/threadcreateidle.c index dbb2018bf8..66ed92702e 100644 --- a/cpukit/score/src/threadcreateidle.c +++ b/cpukit/score/src/threadcreateidle.c @@ -18,6 +18,7 @@ #include "config.h" #endif +#include <rtems/score/threadidledata.h> #include <rtems/score/threadimpl.h> #include <rtems/score/assert.h> #include <rtems/score/schedulerimpl.h> @@ -51,7 +52,7 @@ static void _Thread_Create_idle_for_CPU( Per_CPU_Control *cpu ) config.name.name_u32 = _Objects_Build_name( 'I', 'D', 'L', 'E' ); config.is_fp = CPU_IDLE_TASK_IS_FP; config.is_preemptible = true; - config.stack_size = rtems_configuration_get_idle_task_stack_size() + config.stack_size = _Thread_Idle_stack_size + CPU_IDLE_TASK_IS_FP * CONTEXT_FP_SIZE; config.stack_area = &_Thread_Idle_stacks[ _Per_CPU_Get_index( cpu ) * config.stack_size -- 2.16.4 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel