[PATCH v2 08/44] config: Add _Thread_Idle_stack_size
Sebastian Huber
sebastian.huber at embedded-brains.de
Fri Feb 21 10:52:20 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/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
More information about the devel
mailing list