summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-08-07 06:25:47 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-08-08 08:15:13 +0200
commitfd27bae5b949f1beee2ca2ba4cccecc7e89f40cb (patch)
tree4f2a002431ec9bf8b8f448289f332de78ddc75ff
parenttests: Remove CONFIGURE_MAXIMUM_DRIVERS (diff)
downloadrtems-fd27bae5b949f1beee2ca2ba4cccecc7e89f40cb.tar.bz2
CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
Make CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE configurable by the user. Update #3434.
-rw-r--r--cpukit/include/rtems/confdefs.h5
-rw-r--r--cpukit/include/rtems/posix/pthread.h2
-rw-r--r--cpukit/include/rtems/posix/pthreadimpl.h2
-rw-r--r--testsuites/psxtests/psxconfig01/init.c17
4 files changed, 25 insertions, 1 deletions
diff --git a/cpukit/include/rtems/confdefs.h b/cpukit/include/rtems/confdefs.h
index 6e7bcdf570..7d1407564b 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
};
+
+ const 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..bf46253776 100644
--- a/cpukit/include/rtems/posix/pthread.h
+++ b/cpukit/include/rtems/posix/pthread.h
@@ -37,6 +37,8 @@ extern "C" {
*/
/**@{**/
+extern const 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(