[PATCH] CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Aug 7 06:00:22 UTC 2018


Make CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE configurable by the user.

Update #3434.
---
 cpukit/include/rtems/confdefs.h          |  5 +++++
 cpukit/include/rtems/posix/pthread.h     |  2 ++
 cpukit/include/rtems/posix/pthreadimpl.h |  2 +-
 testsuites/psxtests/psxconfig01/init.c   | 17 +++++++++++++++++
 4 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/cpukit/include/rtems/confdefs.h b/cpukit/include/rtems/confdefs.h
index 6e7bcdf570..8119436e7c 100644
--- a/cpukit/include/rtems/confdefs.h
+++ b/cpukit/include/rtems/confdefs.h
@@ -1165,8 +1165,10 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
  * This specifies the default POSIX thread stack size. By default, it is
  * twice that recommended for the port.
  */
+#ifndef CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
 #define CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE \
   (2 * CONFIGURE_MINIMUM_TASK_STACK_SIZE)
+#endif
 
 /**
  * @brief Idle task stack size configuration.
@@ -3050,6 +3052,9 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
       CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE,
       CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME
     };
+
+    size_t _Configuration_POSIX_Minimum_stack_size =
+      CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE;
   #endif
 
   /**
diff --git a/cpukit/include/rtems/posix/pthread.h b/cpukit/include/rtems/posix/pthread.h
index 05783ff4ad..818d0f89d0 100644
--- a/cpukit/include/rtems/posix/pthread.h
+++ b/cpukit/include/rtems/posix/pthread.h
@@ -37,6 +37,8 @@ extern "C" {
  */
 /**@{**/
 
+extern size_t _Configuration_POSIX_Minimum_stack_size;
+
 /**
  * @brief POSIX threads initialize user threads body.
  *
diff --git a/cpukit/include/rtems/posix/pthreadimpl.h b/cpukit/include/rtems/posix/pthreadimpl.h
index e6ed1b8990..d900207fbd 100644
--- a/cpukit/include/rtems/posix/pthreadimpl.h
+++ b/cpukit/include/rtems/posix/pthreadimpl.h
@@ -40,7 +40,7 @@ extern "C" {
 /**
  * The following sets the minimum stack size for POSIX threads.
  */
-#define PTHREAD_MINIMUM_STACK_SIZE (_Stack_Minimum() * 2)
+#define PTHREAD_MINIMUM_STACK_SIZE _Configuration_POSIX_Minimum_stack_size
 
 /**
  * The following defines the information control block used to manage
diff --git a/testsuites/psxtests/psxconfig01/init.c b/testsuites/psxtests/psxconfig01/init.c
index 910932a997..70e489823b 100644
--- a/testsuites/psxtests/psxconfig01/init.c
+++ b/testsuites/psxtests/psxconfig01/init.c
@@ -25,6 +25,8 @@
   #include "config.h"
 #endif
 
+#define _GNU_SOURCE
+
 #include <rtems/test.h>
 #include <tmacros.h>
 
@@ -65,6 +67,8 @@ const char rtems_test_name[] = "PSXCONFIG 1";
 #define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 41
 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
 
+#define CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE CPU_STACK_MINIMUM_SIZE
+
 #define CONFIGURE_MAXIMUM_POSIX_THREADS 3
 #define CONFIGURE_MAXIMUM_POSIX_TIMERS 47
 
@@ -462,8 +466,21 @@ static rtems_task Init(rtems_task_argument argument)
 #ifdef CONFIGURE_MAXIMUM_POSIX_THREADS
   for (i = 0; i < CONFIGURE_MAXIMUM_POSIX_THREADS; ++i) {
     pthread_t thread;
+    pthread_attr_t attr;
+    size_t stack_size;
+
     eno = pthread_create(&thread, NULL, posix_thread, NULL);
     rtems_test_assert(eno == 0);
+
+    eno = pthread_getattr_np(thread, &attr);
+    rtems_test_assert(eno == 0);
+
+    eno = pthread_attr_getstacksize(&attr, &stack_size);
+    rtems_test_assert(eno == 0);
+    rtems_test_assert(stack_size == CPU_STACK_MINIMUM_SIZE);
+
+    eno = pthread_attr_destroy(&attr);
+    rtems_test_assert(eno == 0);
   }
   rtems_resource_snapshot_take(&snapshot);
   rtems_test_assert(
-- 
2.13.7



More information about the devel mailing list