blob: f821d9defebb45cd79bf04513613c4fea7bde8ee [file] [log] [blame]
# Copyright (c) 2017 Intel Corporation
# Copyright (c) 2023 Meta
# Copyright (c) 2024 Tenstorrent AI ULC
#
# SPDX-License-Identifier: Apache-2.0
menuconfig POSIX_THREADS
bool "POSIX thread support"
help
Select 'y' here to enable POSIX threads, mutexes, condition variables, and thread-specific
storage.
For more information please see
https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_subprofiles.html
if POSIX_THREADS
config POSIX_THREAD_THREADS_MAX
int "Maximum number of POSIX threads"
default 5
help
Maximum simultaneously active threads in a POSIX application.
For more information, see
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html
config MAX_PTHREAD_MUTEX_COUNT
int "Maximum number of POSIX mutexes"
default 5
help
Maximum simultaneously active mutexes in a POSIX application.
config MAX_PTHREAD_COND_COUNT
int "Maximum number of POSIX condition variables"
default 5
help
Maximum simultaneously active condition variables in a POSIX application.
config POSIX_THREAD_KEYS_MAX
int "Maximum number of POSIX thread-specific-storage keys"
default 5
help
Maximum simultaneously active thread-specific-storage keys in a POSIX application.
For more information, see
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html
config PTHREAD_RECYCLER_DELAY_MS
int "Delay for reclaiming dynamic pthread stacks (ms)"
default 100
help
Prior to a POSIX thread terminating via k_thread_abort(), scheduled
work is added to the system workqueue (SWQ) so that any resources
allocated by the thread (e.g. thread stack from a pool or the heap)
can be released back to the system. Because resources are also freed
on calls to pthread_create() there is no need to worry about resource
starvation.
This option sets the number of milliseconds by which to defer
scheduled work.
Note: this option should be considered temporary and will likely be
removed once a more synchronous solution is available.
config POSIX_THREAD_ATTR_STACKADDR
bool "Support getting and setting POSIX thread stack addresses"
help
Enable this option to use pthread_attr_getstackaddr() and
pthread_attr_setstackaddr().
This option was removed in IEEE 1003.1-2017 in favour of
pthread_attr_getstack() and pthread_attr_setstack().
For more information, please see
https://pubs.opengroup.org/onlinepubs/009696799/functions/pthread_attr_getstackaddr.html
https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xsh_chap03.html
https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_09_08
config POSIX_THREAD_ATTR_STACKSIZE
bool "Support getting and setting POSIX thread stack sizes"
help
Enable this option to use pthread_attr_getstacksize() or
pthread_attr_setstacksize().
For more information, please see
https://pubs.opengroup.org/onlinepubs/009696699/functions/pthread_attr_getstacksize.html
config POSIX_THREADS_EXT
bool "Extended POSIX thread support"
help
Enable this option to use pthread_attr_getguardsize(), pthread_attr_setguardsize(),
pthread_mutexattr_gettype(), or pthread_mutexattr_settype().
For more information, please see
https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_subprofiles.html
config POSIX_THREAD_PRIORITY_SCHEDULING
bool "Run POSIX threads with different priorities and schedulers"
help
Enabling this option allows the application to configure different priorities and
scheduling algorithms for different threads via functions such as pthread_setschedparam()
and pthread_setschedprio(). This is required for Realtime Threads and Advanced Realtime
Threads.
For more information, please see
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap02.html#tag_02_01_06
https://man7.org/linux/man-pages/man7/posixoptions.7.html
config POSIX_PTHREAD_ATTR_STACKSIZE_BITS
int "Significant bits for pthread_attr_t stacksize"
range 8 31
default 23
help
This value plays a part in determining the maximum supported
pthread_attr_t stacksize. Valid stacksizes are in the range
[1, N], where N = 1 << M, and M is this configuration value.
config POSIX_PTHREAD_ATTR_GUARDSIZE_BITS
int "Significant bits for pthread_attr_t guardsize"
range 1 31
default 9
help
This value plays a part in determining the maximum supported
pthread_attr_t guardsize. Valid guardsizes are in the range
[0, N-1], where N = 1 << M, and M is this configuration value.
Actual guardsize values may be rounded-up.
config POSIX_PTHREAD_ATTR_GUARDSIZE_DEFAULT
int "Default size of stack guard area"
default 0
help
This is the default amount of space to reserve at the overflow end of a
pthread stack. Since Zephyr already supports both software-based stack
protection (canaries) and hardware-based stack protection (MMU or MPU),
this is set to 0 by default. However, a conforming application would be
required to set this to PAGESIZE. Eventually, this option might
facilitate a more dynamic approach to guard areas (via software or
hardware) but for now it simply increases the size of thread stacks.
config POSIX_THREAD_PRIO_INHERIT
bool "POSIX mutex priority inheritance"
help
Select 'y' here to enable POSIX mutex priority inheritance.
For more information, please see
https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_getprotocol.html
config POSIX_THREAD_PRIO_PROTECT
bool "POSIX mutex priority protection"
help
Select 'y' here to enable POSIX mutex priority protection.
For more information, please see
https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_getprotocol.html
config POSIX_THREAD_SAFE_FUNCTIONS
bool "POSIX thread-safe functions"
select POSIX_FILE_SYSTEM_R if POSIX_FILE_SYSTEM
select POSIX_C_LANG_SUPPORT_R
help
Select 'y' here to enable POSIX thread-safe functions including asctime_r(), ctime_r(),
flockfile(), ftrylockfile(), funlockfile(), getc_unlocked(), getchar_unlocked(),
getgrgid_r(), getgrnam_r(), getpwnam_r(), getpwuid_r(), gmtime_r(), localtime_r(),
putc_unlocked(), putchar_unlocked(), rand_r(), readdir_r(), strerror_r(), and strtok_r().
For more information, please see
https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xsh_chap02.html#tag_22_02_09_07
module = PTHREAD
module-str = POSIX thread
source "subsys/logging/Kconfig.template.log_config"
module = PTHREAD_MUTEX
module-str = POSIX mutex
source "subsys/logging/Kconfig.template.log_config"
module = PTHREAD_COND
module-str = POSIX condition variable
source "subsys/logging/Kconfig.template.log_config"
module = PTHREAD_KEY
module-str = POSIX thread-specific data
source "subsys/logging/Kconfig.template.log_config"
endif # POSIX_THREADS