[PATCH 12/18] config: Add _Thread_Idle_stack_size
Sebastian Huber
sebastian.huber at embedded-brains.de
Fri Feb 14 16:02:37 UTC 2020
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/Makefile.am | 1 +
cpukit/headers.am | 1 +
cpukit/include/rtems/confdefs.h | 6 ++-
cpukit/include/rtems/config.h | 10 +---
cpukit/include/rtems/score/threadidledata.h | 70 +++++++++++++++++++++++++++
cpukit/score/src/threadcreateidle.c | 3 +-
cpukit/score/src/threadidlestacksizedefault.c | 34 +++++++++++++
7 files changed, 115 insertions(+), 10 deletions(-)
create mode 100644 cpukit/include/rtems/score/threadidledata.h
create mode 100644 cpukit/score/src/threadidlestacksizedefault.c
diff --git a/cpukit/Makefile.am b/cpukit/Makefile.am
index 4a793bf1f9..13ddeeab51 100644
--- a/cpukit/Makefile.am
+++ b/cpukit/Makefile.am
@@ -956,6 +956,7 @@ librtemscpu_a_SOURCES += score/src/threaddispatch.c
librtemscpu_a_SOURCES += score/src/threadget.c
librtemscpu_a_SOURCES += score/src/threadhandler.c
librtemscpu_a_SOURCES += score/src/threadinitialize.c
+librtemscpu_a_SOURCES += score/src/threadidlestacksizedefault.c
librtemscpu_a_SOURCES += score/src/threadloadenv.c
librtemscpu_a_SOURCES += score/src/threadrestart.c
librtemscpu_a_SOURCES += score/src/threadsetstate.c
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 6542c2a26d..9e166b39f3 100644
--- a/cpukit/include/rtems/confdefs.h
+++ b/cpukit/include/rtems/confdefs.h
@@ -1161,6 +1161,11 @@ extern "C" {
#error "CONFIGURE_IDLE_TASK_STACK_SIZE less than CONFIGURE_MINIMUM_TASK_STACK_SIZE"
#endif
+#if defined(CONFIGURE_INIT) && \
+ CONFIGURE_IDLE_TASK_STACK_SIZE != THREAD_IDLE_STACK_SIZE_DEFAULT
+ const size_t _Thread_Idle_stack_size = CONFIGURE_IDLE_TASK_STACK_SIZE;
+#endif
+
/*
* Interrupt stack configuration.
*
@@ -2655,7 +2660,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..aa39466f7f
--- /dev/null
+++ b/cpukit/include/rtems/score/threadidledata.h
@@ -0,0 +1,70 @@
+/**
+ * @file
+ *
+ * @ingroup RTEMSScoreThread
+ *
+ * @brief Constants for the idle threads.
+ */
+
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2020 embedded brains GmbH
+ *
+ * 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/cpu.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup RTEMSScoreThread
+ *
+ * @{
+ */
+
+/**
+ * @brief Default value for the idle thread stack size in bytes.
+ */
+#define THREAD_IDLE_STACK_SIZE_DEFAULT CPU_STACK_MINIMUM_SIZE
+
+/**
+ * @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
diff --git a/cpukit/score/src/threadidlestacksizedefault.c b/cpukit/score/src/threadidlestacksizedefault.c
new file mode 100644
index 0000000000..9582b416af
--- /dev/null
+++ b/cpukit/score/src/threadidlestacksizedefault.c
@@ -0,0 +1,34 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2020 embedded brains GmbH
+ *
+ * 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.
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <rtems/score/threadidledata.h>
+
+const size_t _Thread_Idle_stack_size = THREAD_IDLE_STACK_SIZE_DEFAULT;
--
2.16.4
More information about the devel
mailing list