[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