posix: deprecate SEM_VALUE_MAX and SEM_NAMELEN_MAX
This change deprecates CONFIG_SEM_VALUE_MAX in favour of CONFIG_POSIX_SEM_VALUE_MAX which maps directly to _POSIX_SEM_VALUE_MAX. Additionally, we add the Kconfig option CONFIG_POSIX_SEMAPHORES which maps directly to the POSIX Option _POSIX_SEMAPHORES. For consistence, deprecate CONFIG_SEM_NAMELEN_MAX in favour of CONFIG_POSIX_SEM_NAMELEN_MAX. Signed-off-by: Chris Friedt <cfriedt@tenstorrent.com>
This commit is contained in:
parent
9f6590c7b7
commit
842a7b7ba1
10 changed files with 70 additions and 33 deletions
|
@ -68,7 +68,7 @@ POSIX System Interfaces
|
||||||
_POSIX_MEMORY_PROTECTION, -1, :ref:`†<posix_undefined_behaviour>`
|
_POSIX_MEMORY_PROTECTION, -1, :ref:`†<posix_undefined_behaviour>`
|
||||||
:ref:`_POSIX_READER_WRITER_LOCKS<posix_option_reader_writer_locks>`, 200809L, :kconfig:option:`CONFIG_POSIX_READER_WRITER_LOCKS`
|
:ref:`_POSIX_READER_WRITER_LOCKS<posix_option_reader_writer_locks>`, 200809L, :kconfig:option:`CONFIG_POSIX_READER_WRITER_LOCKS`
|
||||||
:ref:`_POSIX_REALTIME_SIGNALS<posix_option_group_realtime_signals>`, -1,
|
:ref:`_POSIX_REALTIME_SIGNALS<posix_option_group_realtime_signals>`, -1,
|
||||||
:ref:`_POSIX_SEMAPHORES<posix_option_group_semaphores>`, 200809L, :kconfig:option:`CONFIG_PTHREAD_IPC`
|
:ref:`_POSIX_SEMAPHORES<posix_option_group_semaphores>`, 200809L, :kconfig:option:`CONFIG_POSIX_SEMAPHORES`
|
||||||
:ref:`_POSIX_SPIN_LOCKS<posix_option_group_spin_locks>`, 200809L, :kconfig:option:`CONFIG_POSIX_SPIN_LOCKS`
|
:ref:`_POSIX_SPIN_LOCKS<posix_option_group_spin_locks>`, 200809L, :kconfig:option:`CONFIG_POSIX_SPIN_LOCKS`
|
||||||
:ref:`_POSIX_THREAD_SAFE_FUNCTIONS<posix_thread_safe_functions>`, -1,
|
:ref:`_POSIX_THREAD_SAFE_FUNCTIONS<posix_thread_safe_functions>`, -1,
|
||||||
:ref:`_POSIX_THREADS<posix_option_group_threads_base>`, -1, :kconfig:option:`CONFIG_PTHREAD_IPC`
|
:ref:`_POSIX_THREADS<posix_option_group_threads_base>`, -1, :kconfig:option:`CONFIG_PTHREAD_IPC`
|
||||||
|
|
|
@ -35,5 +35,7 @@ implementation of the POSIX API.
|
||||||
* :kconfig:option:`CONFIG_PTHREAD_KEY`
|
* :kconfig:option:`CONFIG_PTHREAD_KEY`
|
||||||
* :kconfig:option:`CONFIG_PTHREAD_MUTEX`
|
* :kconfig:option:`CONFIG_PTHREAD_MUTEX`
|
||||||
* :kconfig:option:`CONFIG_PTHREAD_RECYCLER_DELAY_MS`
|
* :kconfig:option:`CONFIG_PTHREAD_RECYCLER_DELAY_MS`
|
||||||
* :kconfig:option:`CONFIG_SEM_VALUE_MAX`
|
* :kconfig:option:`CONFIG_POSIX_SEM_NAMELEN_MAX`
|
||||||
|
* :kconfig:option:`CONFIG_POSIX_SEM_NSEMS_MAX`
|
||||||
|
* :kconfig:option:`CONFIG_POSIX_SEM_VALUE_MAX`
|
||||||
* :kconfig:option:`CONFIG_TIMER_CREATE_WAIT`
|
* :kconfig:option:`CONFIG_TIMER_CREATE_WAIT`
|
||||||
|
|
|
@ -79,7 +79,7 @@
|
||||||
/* #define _POSIX_REGEXP (-1L) */
|
/* #define _POSIX_REGEXP (-1L) */
|
||||||
/* #define _POSIX_SAVED_IDS (-1L) */
|
/* #define _POSIX_SAVED_IDS (-1L) */
|
||||||
|
|
||||||
#ifdef CONFIG_PTHREAD_IPC
|
#ifdef CONFIG_POSIX_SEMAPHORES
|
||||||
#define _POSIX_SEMAPHORES _POSIX_VERSION
|
#define _POSIX_SEMAPHORES _POSIX_VERSION
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -217,8 +217,10 @@
|
||||||
#define _POSIX_RE_DUP_MAX (255)
|
#define _POSIX_RE_DUP_MAX (255)
|
||||||
#define _POSIX_RTSIG_MAX \
|
#define _POSIX_RTSIG_MAX \
|
||||||
COND_CODE_1(CONFIG_POSIX_REALTIME_SIGNALS, (CONFIG_POSIX_RTSIG_MAX), (0))
|
COND_CODE_1(CONFIG_POSIX_REALTIME_SIGNALS, (CONFIG_POSIX_RTSIG_MAX), (0))
|
||||||
#define _POSIX_SEM_NSEMS_MAX CONFIG_SEM_NAMELEN_MAX
|
#define _POSIX_SEM_NSEMS_MAX \
|
||||||
#define _POSIX_SEM_VALUE_MAX CONFIG_SEM_VALUE_MAX
|
COND_CODE_1(CONFIG_POSIX_SEMAPHORES, (CONFIG_POSIX_SEM_NSEMS_MAX), (0))
|
||||||
|
#define _POSIX_SEM_VALUE_MAX \
|
||||||
|
COND_CODE_1(CONFIG_POSIX_SEMAPHORES, (CONFIG_POSIX_SEM_VALUE_MAX), (0))
|
||||||
#define _POSIX_SIGQUEUE_MAX (32)
|
#define _POSIX_SIGQUEUE_MAX (32)
|
||||||
#define _POSIX_SSIZE_MAX (32767)
|
#define _POSIX_SSIZE_MAX (32767)
|
||||||
#define _POSIX_SS_REPL_MAX (4)
|
#define _POSIX_SS_REPL_MAX (4)
|
||||||
|
@ -284,7 +286,7 @@
|
||||||
#define PTHREAD_THREADS_MAX _POSIX_THREAD_THREADS_MAX
|
#define PTHREAD_THREADS_MAX _POSIX_THREAD_THREADS_MAX
|
||||||
#define RTSIG_MAX _POSIX_RTSIG_MAX
|
#define RTSIG_MAX _POSIX_RTSIG_MAX
|
||||||
#define SEM_NSEMS_MAX _POSIX_SEM_NSEMS_MAX
|
#define SEM_NSEMS_MAX _POSIX_SEM_NSEMS_MAX
|
||||||
#define SEM_VALUE_MAX CONFIG_SEM_VALUE_MAX
|
#define SEM_VALUE_MAX _POSIX_SEM_VALUE_MAX
|
||||||
#define SIGQUEUE_MAX _POSIX_SIGQUEUE_MAX
|
#define SIGQUEUE_MAX _POSIX_SIGQUEUE_MAX
|
||||||
#define STREAM_MAX _POSIX_STREAM_MAX
|
#define STREAM_MAX _POSIX_STREAM_MAX
|
||||||
#define SYMLOOP_MAX _POSIX_SYMLOOP_MAX
|
#define SYMLOOP_MAX _POSIX_SYMLOOP_MAX
|
||||||
|
|
|
@ -173,7 +173,7 @@ enum {
|
||||||
#define __z_posix_sysconf_SC_REGEXP (-1L)
|
#define __z_posix_sysconf_SC_REGEXP (-1L)
|
||||||
#define __z_posix_sysconf_SC_SAVED_IDS (-1L)
|
#define __z_posix_sysconf_SC_SAVED_IDS (-1L)
|
||||||
#define __z_posix_sysconf_SC_SEMAPHORES \
|
#define __z_posix_sysconf_SC_SEMAPHORES \
|
||||||
COND_CODE_1(CONFIG_PTHREAD_IPC, (_POSIX_SEMAPHORES), (-1L))
|
COND_CODE_1(CONFIG_POSIX_SEMAPHORES, (_POSIX_SEMAPHORES), (-1L))
|
||||||
#define __z_posix_sysconf_SC_SHARED_MEMORY_OBJECTS (-1L)
|
#define __z_posix_sysconf_SC_SHARED_MEMORY_OBJECTS (-1L)
|
||||||
#define __z_posix_sysconf_SC_SHELL (-1L)
|
#define __z_posix_sysconf_SC_SHELL (-1L)
|
||||||
#define __z_posix_sysconf_SC_SPAWN (-1L)
|
#define __z_posix_sysconf_SC_SPAWN (-1L)
|
||||||
|
|
|
@ -79,7 +79,7 @@ zephyr_library_sources_ifdef(CONFIG_PTHREAD_MUTEX mutex.c)
|
||||||
zephyr_library_sources_ifdef(CONFIG_PTHREAD pthread.c)
|
zephyr_library_sources_ifdef(CONFIG_PTHREAD pthread.c)
|
||||||
zephyr_library_sources_ifdef(CONFIG_POSIX_PRIORITY_SCHEDULING sched.c)
|
zephyr_library_sources_ifdef(CONFIG_POSIX_PRIORITY_SCHEDULING sched.c)
|
||||||
zephyr_library_sources_ifdef(CONFIG_POSIX_READER_WRITER_LOCKS rwlock.c)
|
zephyr_library_sources_ifdef(CONFIG_POSIX_READER_WRITER_LOCKS rwlock.c)
|
||||||
zephyr_library_sources_ifdef(CONFIG_PTHREAD_IPC semaphore.c)
|
zephyr_library_sources_ifdef(CONFIG_POSIX_SEMAPHORES semaphore.c)
|
||||||
|
|
||||||
zephyr_library_sources_ifdef(CONFIG_GETOPT_LONG
|
zephyr_library_sources_ifdef(CONFIG_GETOPT_LONG
|
||||||
getopt/getopt_long.c
|
getopt/getopt_long.c
|
||||||
|
|
|
@ -192,4 +192,22 @@ config TIMER_DELAYTIMER_MAX
|
||||||
|
|
||||||
Please use CONFIG_POSIX_DELAYTIMER_MAX instead.
|
Please use CONFIG_POSIX_DELAYTIMER_MAX instead.
|
||||||
|
|
||||||
|
config SEM_NAMELEN_MAX
|
||||||
|
int "Maximum name length [DEPRECATED]"
|
||||||
|
default POSIX_SEM_NAMELEN_MAX if POSIX_SEMAPHORES
|
||||||
|
default 0
|
||||||
|
help
|
||||||
|
This option is deprecated.
|
||||||
|
|
||||||
|
Please use CONFIG_POSIX_SEM_NAMELEN_MAX instead.
|
||||||
|
|
||||||
|
config SEM_VALUE_MAX
|
||||||
|
int "Maximum semaphore limit [DEPRECATED]"
|
||||||
|
default POSIX_SEM_VALUE_MAX if POSIX_SEMAPHORES
|
||||||
|
default 0
|
||||||
|
help
|
||||||
|
This option is deprecated.
|
||||||
|
|
||||||
|
Please use CONFIG_POSIX_SEM_VALUE_MAX instead.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
|
@ -2,21 +2,36 @@
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
menu "sem_t support"
|
menuconfig POSIX_SEMAPHORES
|
||||||
|
bool "POSIX semaphore support"
|
||||||
|
default y if POSIX_API
|
||||||
|
help
|
||||||
|
Enable this option for POSIX semaphore support.
|
||||||
|
|
||||||
config SEM_VALUE_MAX
|
if POSIX_SEMAPHORES
|
||||||
int "Maximum semaphore limit"
|
|
||||||
|
config POSIX_SEM_VALUE_MAX
|
||||||
|
int "Maximum semaphore value"
|
||||||
default 32767
|
default 32767
|
||||||
range 1 32767
|
range 1 32767
|
||||||
help
|
help
|
||||||
Maximum semaphore count in POSIX compliant Application.
|
Maximum semaphore count in POSIX compliant Application.
|
||||||
|
|
||||||
config SEM_NAMELEN_MAX
|
config POSIX_SEM_NSEMS_MAX
|
||||||
int "Maximum name length"
|
int "Maximum number of semaphores"
|
||||||
|
default 256
|
||||||
|
help
|
||||||
|
Maximum number of semaphores in a POSIX application.
|
||||||
|
|
||||||
|
Note: currently, in Zephyr, this only limits the number of named semaphores (i.e. those
|
||||||
|
created via sem_open()).
|
||||||
|
|
||||||
|
config POSIX_SEM_NAMELEN_MAX
|
||||||
|
int "Maximum semaphore name length"
|
||||||
default 16
|
default 16
|
||||||
range 2 255
|
range 2 255
|
||||||
help
|
help
|
||||||
Maximum length of name for a named semaphore.
|
Maximum length of name for a named semaphore.
|
||||||
The max value of 255 corresponds to {NAME_MAX}.
|
The max value of 255 corresponds to {NAME_MAX}.
|
||||||
|
|
||||||
endmenu # "sem_t support"
|
endif # POSIX_SEMAPHORES
|
||||||
|
|
|
@ -120,7 +120,7 @@ int sem_getvalue(sem_t *semaphore, int *value)
|
||||||
*/
|
*/
|
||||||
int sem_init(sem_t *semaphore, int pshared, unsigned int value)
|
int sem_init(sem_t *semaphore, int pshared, unsigned int value)
|
||||||
{
|
{
|
||||||
if (value > CONFIG_SEM_VALUE_MAX) {
|
if (value > CONFIG_POSIX_SEM_VALUE_MAX) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -131,7 +131,7 @@ int sem_init(sem_t *semaphore, int pshared, unsigned int value)
|
||||||
*/
|
*/
|
||||||
__ASSERT(pshared == 0, "pshared should be 0");
|
__ASSERT(pshared == 0, "pshared should be 0");
|
||||||
|
|
||||||
k_sem_init(semaphore, value, CONFIG_SEM_VALUE_MAX);
|
k_sem_init(semaphore, value, CONFIG_POSIX_SEM_VALUE_MAX);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -232,7 +232,7 @@ sem_t *sem_open(const char *name, int oflags, ...)
|
||||||
value = va_arg(va, unsigned int);
|
value = va_arg(va, unsigned int);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
|
|
||||||
if (value > CONFIG_SEM_VALUE_MAX) {
|
if (value > CONFIG_POSIX_SEM_VALUE_MAX) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return (sem_t *)SEM_FAILED;
|
return (sem_t *)SEM_FAILED;
|
||||||
}
|
}
|
||||||
|
@ -243,7 +243,7 @@ sem_t *sem_open(const char *name, int oflags, ...)
|
||||||
}
|
}
|
||||||
|
|
||||||
namelen = strlen(name);
|
namelen = strlen(name);
|
||||||
if ((namelen + 1) > CONFIG_SEM_NAMELEN_MAX) {
|
if ((namelen + 1) > CONFIG_POSIX_SEM_NAMELEN_MAX) {
|
||||||
errno = ENAMETOOLONG;
|
errno = ENAMETOOLONG;
|
||||||
return (sem_t *)SEM_FAILED;
|
return (sem_t *)SEM_FAILED;
|
||||||
}
|
}
|
||||||
|
@ -291,7 +291,7 @@ sem_t *sem_open(const char *name, int oflags, ...)
|
||||||
/* 1 for this open instance, +1 for the linked name */
|
/* 1 for this open instance, +1 for the linked name */
|
||||||
nsem->ref_count = 2;
|
nsem->ref_count = 2;
|
||||||
|
|
||||||
(void)k_sem_init(&nsem->sem, value, CONFIG_SEM_VALUE_MAX);
|
(void)k_sem_init(&nsem->sem, value, CONFIG_POSIX_SEM_VALUE_MAX);
|
||||||
|
|
||||||
sys_slist_append(&nsem_list, (sys_snode_t *)&(nsem->snode));
|
sys_slist_append(&nsem_list, (sys_snode_t *)&(nsem->snode));
|
||||||
|
|
||||||
|
@ -318,7 +318,7 @@ int sem_unlink(const char *name)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((strlen(name) + 1) > CONFIG_SEM_NAMELEN_MAX) {
|
if ((strlen(name) + 1) > CONFIG_POSIX_SEM_NAMELEN_MAX) {
|
||||||
errno = ENAMETOOLONG;
|
errno = ENAMETOOLONG;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ CONFIG_PTHREAD_IPC=y
|
||||||
CONFIG_POSIX_API=y
|
CONFIG_POSIX_API=y
|
||||||
CONFIG_MAX_PTHREAD_COUNT=6
|
CONFIG_MAX_PTHREAD_COUNT=6
|
||||||
CONFIG_ZTEST=y
|
CONFIG_ZTEST=y
|
||||||
CONFIG_SEM_VALUE_MAX=32767
|
CONFIG_POSIX_SEM_VALUE_MAX=32767
|
||||||
CONFIG_POSIX_MESSAGE_PASSING=y
|
CONFIG_POSIX_MESSAGE_PASSING=y
|
||||||
CONFIG_POSIX_PRIORITY_SCHEDULING=y
|
CONFIG_POSIX_PRIORITY_SCHEDULING=y
|
||||||
CONFIG_HEAP_MEM_POOL_SIZE=4096
|
CONFIG_HEAP_MEM_POOL_SIZE=4096
|
||||||
|
|
|
@ -28,10 +28,10 @@ static void semaphore_test(sem_t *sem)
|
||||||
struct timespec abstime;
|
struct timespec abstime;
|
||||||
|
|
||||||
/* TESTPOINT: Check if sema value is less than
|
/* TESTPOINT: Check if sema value is less than
|
||||||
* CONFIG_SEM_VALUE_MAX
|
* CONFIG_POSIX_SEM_VALUE_MAX
|
||||||
*/
|
*/
|
||||||
zassert_equal(sem_init(sem, 0, (CONFIG_SEM_VALUE_MAX + 1)), -1,
|
zassert_equal(sem_init(sem, 0, (CONFIG_POSIX_SEM_VALUE_MAX + 1)), -1,
|
||||||
"value larger than %d\n", CONFIG_SEM_VALUE_MAX);
|
"value larger than %d\n", CONFIG_POSIX_SEM_VALUE_MAX);
|
||||||
zassert_equal(errno, EINVAL);
|
zassert_equal(errno, EINVAL);
|
||||||
|
|
||||||
zassert_equal(sem_init(sem, 0, 0), 0, "sem_init failed");
|
zassert_equal(sem_init(sem, 0, 0), 0, "sem_init failed");
|
||||||
|
@ -158,8 +158,8 @@ ZTEST(semaphore, test_named_semaphore)
|
||||||
zassert_equal_ptr(sem1, SEM_FAILED);
|
zassert_equal_ptr(sem1, SEM_FAILED);
|
||||||
zassert_equal(nsem_get_list_len(), 0);
|
zassert_equal(nsem_get_list_len(), 0);
|
||||||
|
|
||||||
/* Name exceeds CONFIG_SEM_NAMELEN_MAX */
|
/* Name exceeds CONFIG_POSIX_SEM_NAMELEN_MAX */
|
||||||
char name_too_long[CONFIG_SEM_NAMELEN_MAX + 2];
|
char name_too_long[CONFIG_POSIX_SEM_NAMELEN_MAX + 2];
|
||||||
|
|
||||||
for (size_t i = 0; i < sizeof(name_too_long) - 1; i++) {
|
for (size_t i = 0; i < sizeof(name_too_long) - 1; i++) {
|
||||||
name_too_long[i] = 'a';
|
name_too_long[i] = 'a';
|
||||||
|
@ -168,12 +168,12 @@ ZTEST(semaphore, test_named_semaphore)
|
||||||
|
|
||||||
sem1 = sem_open(name_too_long, 0, 0, 0);
|
sem1 = sem_open(name_too_long, 0, 0, 0);
|
||||||
zassert_equal(errno, ENAMETOOLONG, "\"%s\" should be longer than %d", name_too_long,
|
zassert_equal(errno, ENAMETOOLONG, "\"%s\" should be longer than %d", name_too_long,
|
||||||
CONFIG_SEM_NAMELEN_MAX);
|
CONFIG_POSIX_SEM_NAMELEN_MAX);
|
||||||
zassert_equal_ptr(sem1, SEM_FAILED);
|
zassert_equal_ptr(sem1, SEM_FAILED);
|
||||||
zassert_equal(nsem_get_list_len(), 0);
|
zassert_equal(nsem_get_list_len(), 0);
|
||||||
|
|
||||||
/* `value` greater than CONFIG_SEM_VALUE_MAX */
|
/* `value` greater than CONFIG_POSIX_SEM_VALUE_MAX */
|
||||||
sem1 = sem_open("sem1", O_CREAT, 0, (CONFIG_SEM_VALUE_MAX + 1));
|
sem1 = sem_open("sem1", O_CREAT, 0, (CONFIG_POSIX_SEM_VALUE_MAX + 1));
|
||||||
zassert_equal(errno, EINVAL);
|
zassert_equal(errno, EINVAL);
|
||||||
zassert_equal_ptr(sem1, SEM_FAILED);
|
zassert_equal_ptr(sem1, SEM_FAILED);
|
||||||
zassert_equal(nsem_get_list_len(), 0);
|
zassert_equal(nsem_get_list_len(), 0);
|
||||||
|
@ -238,13 +238,13 @@ ZTEST(semaphore, test_named_semaphore)
|
||||||
zassert_equal(errno, ENOENT);
|
zassert_equal(errno, ENOENT);
|
||||||
zassert_equal(nsem_get_list_len(), 2);
|
zassert_equal(nsem_get_list_len(), 2);
|
||||||
|
|
||||||
/* Name exceeds CONFIG_SEM_NAMELEN_MAX */
|
/* Name exceeds CONFIG_POSIX_SEM_NAMELEN_MAX */
|
||||||
char long_sem_name[CONFIG_SEM_NAMELEN_MAX + 2];
|
char long_sem_name[CONFIG_POSIX_SEM_NAMELEN_MAX + 2];
|
||||||
|
|
||||||
for (int i = 0; i < CONFIG_SEM_NAMELEN_MAX + 1; i++) {
|
for (int i = 0; i < CONFIG_POSIX_SEM_NAMELEN_MAX + 1; i++) {
|
||||||
long_sem_name[i] = 'a';
|
long_sem_name[i] = 'a';
|
||||||
}
|
}
|
||||||
long_sem_name[CONFIG_SEM_NAMELEN_MAX + 1] = '\0';
|
long_sem_name[CONFIG_POSIX_SEM_NAMELEN_MAX + 1] = '\0';
|
||||||
|
|
||||||
zassert_equal(sem_unlink(long_sem_name), -1);
|
zassert_equal(sem_unlink(long_sem_name), -1);
|
||||||
zassert_equal(errno, ENAMETOOLONG);
|
zassert_equal(errno, ENAMETOOLONG);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue