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>`
|
||||
: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_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_THREAD_SAFE_FUNCTIONS<posix_thread_safe_functions>`, -1,
|
||||
: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_MUTEX`
|
||||
* :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`
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
/* #define _POSIX_REGEXP (-1L) */
|
||||
/* #define _POSIX_SAVED_IDS (-1L) */
|
||||
|
||||
#ifdef CONFIG_PTHREAD_IPC
|
||||
#ifdef CONFIG_POSIX_SEMAPHORES
|
||||
#define _POSIX_SEMAPHORES _POSIX_VERSION
|
||||
#endif
|
||||
|
||||
|
@ -217,8 +217,10 @@
|
|||
#define _POSIX_RE_DUP_MAX (255)
|
||||
#define _POSIX_RTSIG_MAX \
|
||||
COND_CODE_1(CONFIG_POSIX_REALTIME_SIGNALS, (CONFIG_POSIX_RTSIG_MAX), (0))
|
||||
#define _POSIX_SEM_NSEMS_MAX CONFIG_SEM_NAMELEN_MAX
|
||||
#define _POSIX_SEM_VALUE_MAX CONFIG_SEM_VALUE_MAX
|
||||
#define _POSIX_SEM_NSEMS_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_SSIZE_MAX (32767)
|
||||
#define _POSIX_SS_REPL_MAX (4)
|
||||
|
@ -284,7 +286,7 @@
|
|||
#define PTHREAD_THREADS_MAX _POSIX_THREAD_THREADS_MAX
|
||||
#define RTSIG_MAX _POSIX_RTSIG_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 STREAM_MAX _POSIX_STREAM_MAX
|
||||
#define SYMLOOP_MAX _POSIX_SYMLOOP_MAX
|
||||
|
|
|
@ -173,7 +173,7 @@ enum {
|
|||
#define __z_posix_sysconf_SC_REGEXP (-1L)
|
||||
#define __z_posix_sysconf_SC_SAVED_IDS (-1L)
|
||||
#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_SHELL (-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_POSIX_PRIORITY_SCHEDULING sched.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
|
||||
getopt/getopt_long.c
|
||||
|
|
|
@ -192,4 +192,22 @@ config TIMER_DELAYTIMER_MAX
|
|||
|
||||
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
|
||||
|
|
|
@ -2,21 +2,36 @@
|
|||
#
|
||||
# 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
|
||||
int "Maximum semaphore limit"
|
||||
if POSIX_SEMAPHORES
|
||||
|
||||
config POSIX_SEM_VALUE_MAX
|
||||
int "Maximum semaphore value"
|
||||
default 32767
|
||||
range 1 32767
|
||||
help
|
||||
Maximum semaphore count in POSIX compliant Application.
|
||||
|
||||
config SEM_NAMELEN_MAX
|
||||
int "Maximum name length"
|
||||
config POSIX_SEM_NSEMS_MAX
|
||||
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
|
||||
range 2 255
|
||||
help
|
||||
Maximum length of name for a named semaphore.
|
||||
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)
|
||||
{
|
||||
if (value > CONFIG_SEM_VALUE_MAX) {
|
||||
if (value > CONFIG_POSIX_SEM_VALUE_MAX) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
@ -131,7 +131,7 @@ int sem_init(sem_t *semaphore, int pshared, unsigned int value)
|
|||
*/
|
||||
__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;
|
||||
}
|
||||
|
@ -232,7 +232,7 @@ sem_t *sem_open(const char *name, int oflags, ...)
|
|||
value = va_arg(va, unsigned int);
|
||||
va_end(va);
|
||||
|
||||
if (value > CONFIG_SEM_VALUE_MAX) {
|
||||
if (value > CONFIG_POSIX_SEM_VALUE_MAX) {
|
||||
errno = EINVAL;
|
||||
return (sem_t *)SEM_FAILED;
|
||||
}
|
||||
|
@ -243,7 +243,7 @@ sem_t *sem_open(const char *name, int oflags, ...)
|
|||
}
|
||||
|
||||
namelen = strlen(name);
|
||||
if ((namelen + 1) > CONFIG_SEM_NAMELEN_MAX) {
|
||||
if ((namelen + 1) > CONFIG_POSIX_SEM_NAMELEN_MAX) {
|
||||
errno = ENAMETOOLONG;
|
||||
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 */
|
||||
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));
|
||||
|
||||
|
@ -318,7 +318,7 @@ int sem_unlink(const char *name)
|
|||
return -1;
|
||||
}
|
||||
|
||||
if ((strlen(name) + 1) > CONFIG_SEM_NAMELEN_MAX) {
|
||||
if ((strlen(name) + 1) > CONFIG_POSIX_SEM_NAMELEN_MAX) {
|
||||
errno = ENAMETOOLONG;
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ CONFIG_PTHREAD_IPC=y
|
|||
CONFIG_POSIX_API=y
|
||||
CONFIG_MAX_PTHREAD_COUNT=6
|
||||
CONFIG_ZTEST=y
|
||||
CONFIG_SEM_VALUE_MAX=32767
|
||||
CONFIG_POSIX_SEM_VALUE_MAX=32767
|
||||
CONFIG_POSIX_MESSAGE_PASSING=y
|
||||
CONFIG_POSIX_PRIORITY_SCHEDULING=y
|
||||
CONFIG_HEAP_MEM_POOL_SIZE=4096
|
||||
|
|
|
@ -28,10 +28,10 @@ static void semaphore_test(sem_t *sem)
|
|||
struct timespec abstime;
|
||||
|
||||
/* 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,
|
||||
"value larger than %d\n", CONFIG_SEM_VALUE_MAX);
|
||||
zassert_equal(sem_init(sem, 0, (CONFIG_POSIX_SEM_VALUE_MAX + 1)), -1,
|
||||
"value larger than %d\n", CONFIG_POSIX_SEM_VALUE_MAX);
|
||||
zassert_equal(errno, EINVAL);
|
||||
|
||||
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(nsem_get_list_len(), 0);
|
||||
|
||||
/* Name exceeds CONFIG_SEM_NAMELEN_MAX */
|
||||
char name_too_long[CONFIG_SEM_NAMELEN_MAX + 2];
|
||||
/* Name exceeds CONFIG_POSIX_SEM_NAMELEN_MAX */
|
||||
char name_too_long[CONFIG_POSIX_SEM_NAMELEN_MAX + 2];
|
||||
|
||||
for (size_t i = 0; i < sizeof(name_too_long) - 1; i++) {
|
||||
name_too_long[i] = 'a';
|
||||
|
@ -168,12 +168,12 @@ ZTEST(semaphore, test_named_semaphore)
|
|||
|
||||
sem1 = sem_open(name_too_long, 0, 0, 0);
|
||||
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(nsem_get_list_len(), 0);
|
||||
|
||||
/* `value` greater than CONFIG_SEM_VALUE_MAX */
|
||||
sem1 = sem_open("sem1", O_CREAT, 0, (CONFIG_SEM_VALUE_MAX + 1));
|
||||
/* `value` greater than CONFIG_POSIX_SEM_VALUE_MAX */
|
||||
sem1 = sem_open("sem1", O_CREAT, 0, (CONFIG_POSIX_SEM_VALUE_MAX + 1));
|
||||
zassert_equal(errno, EINVAL);
|
||||
zassert_equal_ptr(sem1, SEM_FAILED);
|
||||
zassert_equal(nsem_get_list_len(), 0);
|
||||
|
@ -238,13 +238,13 @@ ZTEST(semaphore, test_named_semaphore)
|
|||
zassert_equal(errno, ENOENT);
|
||||
zassert_equal(nsem_get_list_len(), 2);
|
||||
|
||||
/* Name exceeds CONFIG_SEM_NAMELEN_MAX */
|
||||
char long_sem_name[CONFIG_SEM_NAMELEN_MAX + 2];
|
||||
/* Name exceeds CONFIG_POSIX_SEM_NAMELEN_MAX */
|
||||
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[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(errno, ENAMETOOLONG);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue