posix: deprecate PTHREAD_RWLOCK for POSIX_READER_WRITER_LOCKS

This change deprecates CONFIG_PTHREAD_RWLOCK in favour of
CONFIG_POSIX_READER_WRITER_LOCKS, which maps directly to the
name of the standard POSIX Option.

Annoyingly, the POSIX_RW_LOCKS Option Group is inconsistently
named. However, it is more convenient for us to use the Option
name since it is also the format used by the sysconf() variable
(_SC_READER_WRITER_LOCKS).

Signed-off-by: Chris Friedt <cfriedt@tenstorrent.com>
This commit is contained in:
Chris Friedt 2024-05-22 19:10:38 -04:00 committed by David Leach
commit 70e2b02c8e
9 changed files with 41 additions and 12 deletions

View file

@ -66,7 +66,7 @@ POSIX System Interfaces
:ref:`_POSIX_CLOCK_SELECTION<posix_option_group_clock_selection>`, 200809L, :kconfig:option:`CONFIG_POSIX_CLOCK_SELECTION` :ref:`_POSIX_CLOCK_SELECTION<posix_option_group_clock_selection>`, 200809L, :kconfig:option:`CONFIG_POSIX_CLOCK_SELECTION`
_POSIX_MAPPED_FILES, -1, :ref:`†<posix_undefined_behaviour>` _POSIX_MAPPED_FILES, -1, :ref:`†<posix_undefined_behaviour>`
_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_PTHREAD_IPC` :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_PTHREAD_IPC`
: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`

View file

@ -71,7 +71,7 @@
#define _POSIX_RAW_SOCKETS _POSIX_VERSION #define _POSIX_RAW_SOCKETS _POSIX_VERSION
#endif #endif
#ifdef CONFIG_PTHREAD_IPC #ifdef CONFIG_POSIX_READER_WRITER_LOCKS
#define _POSIX_READER_WRITER_LOCKS _POSIX_VERSION #define _POSIX_READER_WRITER_LOCKS _POSIX_VERSION
#endif #endif

View file

@ -153,7 +153,7 @@ int pthread_condattr_setclock(pthread_condattr_t *att, clockid_t clock_id);
* *
* Initialize a rwlock with the default rwlock attributes. * Initialize a rwlock with the default rwlock attributes.
*/ */
#define PTHREAD_RWLOCK_INITIALIZER (-1) #define POSIX_RWLOCK_INITIALIZER (-1)
/* /*
* Mutex attributes - type * Mutex attributes - type

View file

@ -168,7 +168,7 @@ enum {
COND_CODE_1(CONFIG_NET_SOCKETS_PACKET, (_POSIX_RAW_SOCKETS), (-1L)) COND_CODE_1(CONFIG_NET_SOCKETS_PACKET, (_POSIX_RAW_SOCKETS), (-1L))
#define __z_posix_sysconf_SC_RE_DUP_MAX _POSIX_RE_DUP_MAX #define __z_posix_sysconf_SC_RE_DUP_MAX _POSIX_RE_DUP_MAX
#define __z_posix_sysconf_SC_READER_WRITER_LOCKS \ #define __z_posix_sysconf_SC_READER_WRITER_LOCKS \
COND_CODE_1(CONFIG_PTHREAD_IPC, (_POSIX_READER_WRITER_LOCKS), (-1L)) COND_CODE_1(CONFIG_POSIX_READER_WRITER_LOCKS, (_POSIX_READER_WRITER_LOCKS), (-1L))
#define __z_posix_sysconf_SC_REALTIME_SIGNALS (-1L) #define __z_posix_sysconf_SC_REALTIME_SIGNALS (-1L)
#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)

View file

@ -73,8 +73,8 @@ zephyr_library_sources_ifdef(CONFIG_PTHREAD_COND cond.c)
zephyr_library_sources_ifdef(CONFIG_PTHREAD_KEY key.c) zephyr_library_sources_ifdef(CONFIG_PTHREAD_KEY key.c)
zephyr_library_sources_ifdef(CONFIG_PTHREAD_MUTEX mutex.c) 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_PTHREAD_RWLOCK rwlock.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_PTHREAD_IPC semaphore.c) zephyr_library_sources_ifdef(CONFIG_PTHREAD_IPC semaphore.c)
zephyr_library_include_directories( zephyr_library_include_directories(

View file

@ -120,6 +120,15 @@ config PTHREAD_BARRIER
Please use CONFIG_POSIX_BARRIERS instead. Please use CONFIG_POSIX_BARRIERS instead.
config PTHREAD_RWLOCK
bool "pthread_spinlock_t support [DEPRECATED]"
select DEPRECATED
select POSIX_READER_WRITER_LOCKS
help
This option is deprecated.
Please use CONFIG_POSIX_READER_WRITER_LOCKS instead.
config PTHREAD_SPINLOCK config PTHREAD_SPINLOCK
bool "pthread_spinlock_t support [DEPRECATED]" bool "pthread_spinlock_t support [DEPRECATED]"
select DEPRECATED select DEPRECATED

View file

@ -2,7 +2,27 @@
# #
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
TYPE = PTHREAD_RWLOCK menuconfig POSIX_READER_WRITER_LOCKS
type = pthread_rwlock_t bool "POSIX reader-writer locks"
type-function = pthread_rwlock_timedrdlock default y if POSIX_API
rsource "Kconfig.template.pooled_ipc_type" help
Select 'y' here to enable POSIX reader-writer locks.
For more information please see
https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_subprofiles.html
if POSIX_READER_WRITER_LOCKS
config MAX_PTHREAD_RWLOCK_COUNT
int "Maximum number of POSIX reader-writer locks"
default 5
help
Maximum simultaneously active reader-writer locks in a POSIX application.
Note: this is a non-standard option.
module = PTHREAD_RWLOCK
module-str = POSIX Reader-Writer Locks
source "subsys/logging/Kconfig.template.log_config"
endif # POSIX_READER_WRITER_LOCKS

View file

@ -86,7 +86,7 @@ struct posix_rwlock *to_posix_rwlock(pthread_rwlock_t *rwlock)
size_t bit; size_t bit;
struct posix_rwlock *rwl; struct posix_rwlock *rwl;
if (*rwlock != PTHREAD_RWLOCK_INITIALIZER) { if (*rwlock != POSIX_RWLOCK_INITIALIZER) {
return get_posix_rwlock(*rwlock); return get_posix_rwlock(*rwlock);
} }
@ -116,7 +116,7 @@ int pthread_rwlock_init(pthread_rwlock_t *rwlock,
struct posix_rwlock *rwl; struct posix_rwlock *rwl;
ARG_UNUSED(attr); ARG_UNUSED(attr);
*rwlock = PTHREAD_RWLOCK_INITIALIZER; *rwlock = POSIX_RWLOCK_INITIALIZER;
rwl = to_posix_rwlock(rwlock); rwl = to_posix_rwlock(rwlock);
if (rwl == NULL) { if (rwl == NULL) {

View file

@ -59,7 +59,7 @@ ZTEST(posix_headers, test_pthread_h)
pthread_cond_t cond = PTHREAD_COND_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mu = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mu = PTHREAD_MUTEX_INITIALIZER;
/* pthread_rwlock_t lock = PTHREAD_RWLOCK_INITIALIZER; */ /* not implemented */ /* pthread_rwlock_t lock = POSIX_READER_WRITER_LOCKS_INITIALIZER; */ /* not implemented */
zassert_not_null(pthread_atfork); zassert_not_null(pthread_atfork);
zassert_not_null(pthread_attr_destroy); zassert_not_null(pthread_attr_destroy);