sched/tls: remove PTHREAD_CLEANUP from Kconfig

use PTHREAD_CLEANUP_STACKSIZE to enable or disable interfaces pthread_cleanup_push() and pthread_cleanup_pop().
reasons:(1)same as TLS_TASK_NELEM (2)it is no need to use two variables

Signed-off-by: yanghuatao <yanghuatao@xiaomi.com>
This commit is contained in:
yanghuatao
2023-06-13 14:49:56 +08:00
committed by Xiang Xiao
parent 43fec5dd53
commit 29a336d6a8
22 changed files with 31 additions and 41 deletions
+1 -1
View File
@@ -50,7 +50,7 @@ with NuttX. The list is the following:
``CONFIG_BOARDCTL_OS_SYMTAB=y`` ``CONFIG_NSH_READLINE=y`` ``CONFIG_BOARDCTL_OS_SYMTAB=y`` ``CONFIG_NSH_READLINE=y``
``CONFIG_BUILTIN=y`` ``CONFIG_NSH_ROMFSETC=y`` ``CONFIG_BUILTIN=y`` ``CONFIG_NSH_ROMFSETC=y``
``CONFIG_ELF=y`` ``CONFIG_PSEUDOTERM=y`` ``CONFIG_ELF=y`` ``CONFIG_PSEUDOTERM=y``
``CONFIG_FS_BINFS=y`` ``CONFIG_PTHREAD_CLEANUP=y`` ``CONFIG_FS_BINFS=y`` ``CONFIG_PTHREAD_CLEANUP_STACKSIZE=1``
``CONFIG_FS_PROCFS=y`` ``CONFIG_PTHREAD_MUTEX_TYPES=y`` ``CONFIG_FS_PROCFS=y`` ``CONFIG_PTHREAD_MUTEX_TYPES=y``
``CONFIG_FS_PROCFS_REGISTER=y`` ``CONFIG_PTHREAD_STACK_MIN=1024`` ``CONFIG_FS_PROCFS_REGISTER=y`` ``CONFIG_PTHREAD_STACK_MIN=1024``
``CONFIG_FS_ROMFS=y`` ``CONFIG_LIBM=y`` ``CONFIG_FS_ROMFS=y`` ``CONFIG_LIBM=y``
@@ -134,7 +134,7 @@ CONFIG_NXFONTS_DISABLE_8BPP=y
CONFIG_PRIORITY_INHERITANCE=y CONFIG_PRIORITY_INHERITANCE=y
CONFIG_PSEUDOTERM=y CONFIG_PSEUDOTERM=y
CONFIG_PTABLE_PARTITION=y CONFIG_PTABLE_PARTITION=y
CONFIG_PTHREAD_CLEANUP=y CONFIG_PTHREAD_CLEANUP_STACKSIZE=1
CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_INHERIT=y CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_INHERIT=y
CONFIG_PTHREAD_MUTEX_TYPES=y CONFIG_PTHREAD_MUTEX_TYPES=y
CONFIG_PTHREAD_STACK_MIN=1024 CONFIG_PTHREAD_STACK_MIN=1024
@@ -131,7 +131,7 @@ CONFIG_PREALLOC_TIMERS=4
CONFIG_PRIORITY_INHERITANCE=y CONFIG_PRIORITY_INHERITANCE=y
CONFIG_PSEUDOTERM=y CONFIG_PSEUDOTERM=y
CONFIG_PTABLE_PARTITION=y CONFIG_PTABLE_PARTITION=y
CONFIG_PTHREAD_CLEANUP=y CONFIG_PTHREAD_CLEANUP_STACKSIZE=1
CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_INHERIT=y CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_INHERIT=y
CONFIG_PTHREAD_MUTEX_TYPES=y CONFIG_PTHREAD_MUTEX_TYPES=y
CONFIG_PTHREAD_STACK_MIN=1024 CONFIG_PTHREAD_STACK_MIN=1024
@@ -102,7 +102,7 @@ CONFIG_NSH_ROMFSETC=y
CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=2048 CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=2048
CONFIG_PREALLOC_TIMERS=4 CONFIG_PREALLOC_TIMERS=4
CONFIG_PSEUDOTERM=y CONFIG_PSEUDOTERM=y
CONFIG_PTHREAD_CLEANUP=y CONFIG_PTHREAD_CLEANUP_STACKSIZE=1
CONFIG_PTHREAD_MUTEX_TYPES=y CONFIG_PTHREAD_MUTEX_TYPES=y
CONFIG_PTHREAD_STACK_DEFAULT=2048 CONFIG_PTHREAD_STACK_DEFAULT=2048
CONFIG_PTHREAD_STACK_MIN=1024 CONFIG_PTHREAD_STACK_MIN=1024
@@ -75,7 +75,7 @@ CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=4098
CONFIG_PREALLOC_TIMERS=4 CONFIG_PREALLOC_TIMERS=4
CONFIG_PRIORITY_INHERITANCE=y CONFIG_PRIORITY_INHERITANCE=y
CONFIG_PSEUDOTERM=y CONFIG_PSEUDOTERM=y
CONFIG_PTHREAD_CLEANUP=y CONFIG_PTHREAD_CLEANUP_STACKSIZE=1
CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_INHERIT=y CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_INHERIT=y
CONFIG_PTHREAD_MUTEX_TYPES=y CONFIG_PTHREAD_MUTEX_TYPES=y
CONFIG_PTHREAD_STACK_DEFAULT=2048 CONFIG_PTHREAD_STACK_DEFAULT=2048
@@ -72,7 +72,7 @@ CONFIG_NSH_READLINE=y
CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=2048 CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=2048
CONFIG_PREALLOC_TIMERS=4 CONFIG_PREALLOC_TIMERS=4
CONFIG_PRIORITY_INHERITANCE=y CONFIG_PRIORITY_INHERITANCE=y
CONFIG_PTHREAD_CLEANUP=y CONFIG_PTHREAD_CLEANUP_STACKSIZE=1
CONFIG_PTHREAD_MUTEX_TYPES=y CONFIG_PTHREAD_MUTEX_TYPES=y
CONFIG_PTHREAD_STACK_DEFAULT=2048 CONFIG_PTHREAD_STACK_DEFAULT=2048
CONFIG_PTHREAD_STACK_MIN=1024 CONFIG_PTHREAD_STACK_MIN=1024
+1 -1
View File
@@ -30,7 +30,7 @@ CONFIG_MM_CUSTOMIZE_MANAGER=y
CONFIG_NSH_ARCHINIT=y CONFIG_NSH_ARCHINIT=y
CONFIG_NSH_BUILTIN_APPS=y CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_READLINE=y CONFIG_NSH_READLINE=y
CONFIG_PTHREAD_CLEANUP=y CONFIG_PTHREAD_CLEANUP_STACKSIZE=1
CONFIG_PTHREAD_MUTEX_TYPES=y CONFIG_PTHREAD_MUTEX_TYPES=y
CONFIG_PTHREAD_MUTEX_UNSAFE=y CONFIG_PTHREAD_MUTEX_UNSAFE=y
CONFIG_READLINE_TABCOMPLETION=y CONFIG_READLINE_TABCOMPLETION=y
+1 -1
View File
@@ -33,7 +33,7 @@ CONFIG_MM_UBSAN=y
CONFIG_NSH_ARCHINIT=y CONFIG_NSH_ARCHINIT=y
CONFIG_NSH_BUILTIN_APPS=y CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_READLINE=y CONFIG_NSH_READLINE=y
CONFIG_PTHREAD_CLEANUP=y CONFIG_PTHREAD_CLEANUP_STACKSIZE=1
CONFIG_PTHREAD_MUTEX_TYPES=y CONFIG_PTHREAD_MUTEX_TYPES=y
CONFIG_PTHREAD_MUTEX_UNSAFE=y CONFIG_PTHREAD_MUTEX_UNSAFE=y
CONFIG_READLINE_TABCOMPLETION=y CONFIG_READLINE_TABCOMPLETION=y
@@ -24,7 +24,6 @@ CONFIG_MM_KASAN=y
CONFIG_MM_UBSAN=y CONFIG_MM_UBSAN=y
CONFIG_MM_UBSAN_TRAP_ON_ERROR=y CONFIG_MM_UBSAN_TRAP_ON_ERROR=y
CONFIG_PRIORITY_INHERITANCE=y CONFIG_PRIORITY_INHERITANCE=y
CONFIG_PTHREAD_CLEANUP=y
CONFIG_PTHREAD_CLEANUP_STACKSIZE=3 CONFIG_PTHREAD_CLEANUP_STACKSIZE=3
CONFIG_PTHREAD_MUTEX_TYPES=y CONFIG_PTHREAD_MUTEX_TYPES=y
CONFIG_RAM_START=0x00000000 CONFIG_RAM_START=0x00000000
@@ -87,7 +87,6 @@ CONFIG_NSH_READLINE=y
CONFIG_PREALLOC_TIMERS=4 CONFIG_PREALLOC_TIMERS=4
CONFIG_PSEUDOFS_SOFTLINKS=y CONFIG_PSEUDOFS_SOFTLINKS=y
CONFIG_PSEUDOTERM=y CONFIG_PSEUDOTERM=y
CONFIG_PTHREAD_CLEANUP=y
CONFIG_PTHREAD_CLEANUP_STACKSIZE=2 CONFIG_PTHREAD_CLEANUP_STACKSIZE=2
CONFIG_PTHREAD_MUTEX_TYPES=y CONFIG_PTHREAD_MUTEX_TYPES=y
CONFIG_RAMMTD=y CONFIG_RAMMTD=y
@@ -86,7 +86,6 @@ CONFIG_NSH_READLINE=y
CONFIG_PREALLOC_TIMERS=4 CONFIG_PREALLOC_TIMERS=4
CONFIG_PSEUDOFS_SOFTLINKS=y CONFIG_PSEUDOFS_SOFTLINKS=y
CONFIG_PSEUDOTERM=y CONFIG_PSEUDOTERM=y
CONFIG_PTHREAD_CLEANUP=y
CONFIG_PTHREAD_CLEANUP_STACKSIZE=2 CONFIG_PTHREAD_CLEANUP_STACKSIZE=2
CONFIG_PTHREAD_MUTEX_TYPES=y CONFIG_PTHREAD_MUTEX_TYPES=y
CONFIG_RAMMTD=y CONFIG_RAMMTD=y
+1 -1
View File
@@ -179,7 +179,7 @@ void nx_pthread_exit(FAR void *exit_value) noreturn_function;
* *
****************************************************************************/ ****************************************************************************/
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
struct tls_info_s; struct tls_info_s;
void pthread_cleanup_popall(FAR struct tls_info_s *tls); void pthread_cleanup_popall(FAR struct tls_info_s *tls);
#endif #endif
+2 -2
View File
@@ -156,7 +156,7 @@ struct task_info_s
/* This structure describes one element of the pthread cleanup stack */ /* This structure describes one element of the pthread cleanup stack */
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
struct pthread_cleanup_s struct pthread_cleanup_s
{ {
pthread_cleanup_t pc_cleaner; /* Cleanup callback address */ pthread_cleanup_t pc_cleaner; /* Cleanup callback address */
@@ -206,7 +206,7 @@ struct tls_info_s
uintptr_t tl_elem[CONFIG_TLS_NELEM]; /* TLS elements */ uintptr_t tl_elem[CONFIG_TLS_NELEM]; /* TLS elements */
#endif #endif
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
/* tos - The index to the next available entry at the top of the stack. /* tos - The index to the next available entry at the top of the stack.
* stack - The pre-allocated clean-up stack memory. * stack - The pre-allocated clean-up stack memory.
*/ */
+2 -2
View File
@@ -417,7 +417,7 @@ typedef FAR struct pthread_spinlock_s pthread_spinlock_t;
# endif # endif
#endif /* CONFIG_PTHREAD_SPINLOCKS */ #endif /* CONFIG_PTHREAD_SPINLOCKS */
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
/* This type describes the pthread cleanup callback (non-standard) */ /* This type describes the pthread cleanup callback (non-standard) */
typedef CODE void (*pthread_cleanup_t)(FAR void *arg); typedef CODE void (*pthread_cleanup_t)(FAR void *arg);
@@ -528,7 +528,7 @@ void pthread_testcancel(void);
* is canceled. * is canceled.
*/ */
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
void pthread_cleanup_pop(int execute); void pthread_cleanup_pop(int execute);
void pthread_cleanup_push(pthread_cleanup_t routine, FAR void *arg); void pthread_cleanup_push(pthread_cleanup_t routine, FAR void *arg);
#endif #endif
+1 -1
View File
@@ -66,7 +66,7 @@ ifeq ($(CONFIG_PTHREAD_SPINLOCKS),y)
CSRCS += pthread_spinlock.c CSRCS += pthread_spinlock.c
endif endif
ifeq ($(CONFIG_PTHREAD_CLEANUP),y) ifneq ($(CONFIG_PTHREAD_CLEANUP_STACKSIZE),0)
CSRCS += pthread_cleanup.c CSRCS += pthread_cleanup.c
endif endif
+2 -2
View File
@@ -32,7 +32,7 @@
#include <nuttx/tls.h> #include <nuttx/tls.h>
#include <nuttx/pthread.h> #include <nuttx/pthread.h>
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
/**************************************************************************** /****************************************************************************
* Private Functions * Private Functions
@@ -186,4 +186,4 @@ void pthread_cleanup_popall(FAR struct tls_info_s *tls)
sched_unlock(); sched_unlock();
} }
#endif /* CONFIG_PTHREAD_CLEANUP */ #endif /* defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0 */
+1 -1
View File
@@ -60,7 +60,7 @@ void pthread_exit(FAR void *exit_value)
task_setcancelstate(TASK_CANCEL_DISABLE, NULL); task_setcancelstate(TASK_CANCEL_DISABLE, NULL);
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
pthread_cleanup_popall(tls_get_info()); pthread_cleanup_popall(tls_get_info());
#endif #endif
+3 -3
View File
@@ -33,7 +33,7 @@
* Private Functions * Private Functions
****************************************************************************/ ****************************************************************************/
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
static void rdlock_cleanup(FAR void *arg) static void rdlock_cleanup(FAR void *arg)
{ {
FAR pthread_rwlock_t *rw_lock = (FAR pthread_rwlock_t *)arg; FAR pthread_rwlock_t *rw_lock = (FAR pthread_rwlock_t *)arg;
@@ -109,7 +109,7 @@ int pthread_rwlock_clockrdlock(FAR pthread_rwlock_t *rw_lock,
return err; return err;
} }
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
pthread_cleanup_push(&rdlock_cleanup, rw_lock); pthread_cleanup_push(&rdlock_cleanup, rw_lock);
#endif #endif
while ((err = tryrdlock(rw_lock)) == EBUSY) while ((err = tryrdlock(rw_lock)) == EBUSY)
@@ -130,7 +130,7 @@ int pthread_rwlock_clockrdlock(FAR pthread_rwlock_t *rw_lock,
} }
} }
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
pthread_cleanup_pop(0); pthread_cleanup_pop(0);
#endif #endif
+3 -3
View File
@@ -33,7 +33,7 @@
* Private Functions * Private Functions
****************************************************************************/ ****************************************************************************/
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
static void wrlock_cleanup(FAR void *arg) static void wrlock_cleanup(FAR void *arg)
{ {
FAR pthread_rwlock_t *rw_lock = (FAR pthread_rwlock_t *)arg; FAR pthread_rwlock_t *rw_lock = (FAR pthread_rwlock_t *)arg;
@@ -104,7 +104,7 @@ int pthread_rwlock_clockwrlock(FAR pthread_rwlock_t *rw_lock,
rw_lock->num_writers++; rw_lock->num_writers++;
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
pthread_cleanup_push(&wrlock_cleanup, rw_lock); pthread_cleanup_push(&wrlock_cleanup, rw_lock);
#endif #endif
while (rw_lock->write_in_progress || rw_lock->num_readers > 0) while (rw_lock->write_in_progress || rw_lock->num_readers > 0)
@@ -125,7 +125,7 @@ int pthread_rwlock_clockwrlock(FAR pthread_rwlock_t *rw_lock,
} }
} }
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
pthread_cleanup_pop(0); pthread_cleanup_pop(0);
#endif #endif
+2 -2
View File
@@ -96,7 +96,7 @@ void exit(int status)
task_setcancelstate(TASK_CANCEL_DISABLE, NULL); task_setcancelstate(TASK_CANCEL_DISABLE, NULL);
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
pthread_cleanup_popall(tls_get_info()); pthread_cleanup_popall(tls_get_info());
#endif #endif
@@ -145,7 +145,7 @@ void quick_exit(int status)
task_setcancelstate(TASK_CANCEL_DISABLE, NULL); task_setcancelstate(TASK_CANCEL_DISABLE, NULL);
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
pthread_cleanup_popall(tls_get_info()); pthread_cleanup_popall(tls_get_info());
#endif #endif
+5 -12
View File
@@ -752,22 +752,15 @@ config PTHREAD_MUTEX_DEFAULT_PRIO_INHERIT
endchoice # Default pthread mutex protocol endchoice # Default pthread mutex protocol
config PTHREAD_CLEANUP
bool "pthread cleanup stack"
default n
---help---
Select to enable support for pthread exit cleanup stacks. This
enables the interfaces pthread_cleanup_push() and
pthread_cleanup_pop().
config PTHREAD_CLEANUP_STACKSIZE config PTHREAD_CLEANUP_STACKSIZE
int "pthread cleanup stack size" int "pthread cleanup stack size"
default 1 default 0
range 1 32 range 0 32
depends on PTHREAD_CLEANUP
---help--- ---help---
The maximum number of cleanup actions that may be pushed by The maximum number of cleanup actions that may be pushed by
pthread_clean_push(). This setting will increase the size of EVERY pthread_cleanup_push().
if 0 disable the interfaces pthread_cleanup_push() and pthread_cleanup_pop().
This setting will increase the size of EVERY
pthread task control block by about n * CONFIG_PTHREAD_CLEANUP_STACKSIZE pthread task control block by about n * CONFIG_PTHREAD_CLEANUP_STACKSIZE
where n is the size of a pointer, 2 * sizeof(uintptr_t), this would be where n is the size of a pointer, 2 * sizeof(uintptr_t), this would be
8 for a CPU with 32-bit addressing and 4 for a CPU with 16-bit 8 for a CPU with 32-bit addressing and 4 for a CPU with 16-bit
+1 -1
View File
@@ -90,7 +90,7 @@ int pthread_cancel(pthread_t thread)
/* Refer to tls_get_info() */ /* Refer to tls_get_info() */
#ifdef CONFIG_PTHREAD_CLEANUP #if defined(CONFIG_PTHREAD_CLEANUP_STACKSIZE) && CONFIG_PTHREAD_CLEANUP_STACKSIZE > 0
pthread_cleanup_popall(tcb->stack_alloc_ptr); pthread_cleanup_popall(tcb->stack_alloc_ptr);
#endif #endif