From fd27bae5b949f1beee2ca2ba4cccecc7e89f40cb Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 7 Aug 2018 06:25:47 +0200 Subject: CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE 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..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 #include @@ -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( -- cgit v1.2.3