Date: Fri, 30 Oct 2015 19:20:41 +0000 (UTC) From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r290202 - in head/sys: kern sys Message-ID: <201510301920.t9UJKf7b031954@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kib Date: Fri Oct 30 19:20:40 2015 New Revision: 290202 URL: https://svnweb.freebsd.org/changeset/base/290202 Log: Use C99 array initialization, which also makes the code self-documented, and eases addition of new ops. For the similar reasons, eliminate UMTX_OP_MAX. nitems() handles the only use of the symbol. Sponsored by: The FreeBSD Foundation MFC after: 1 week Modified: head/sys/kern/kern_umtx.c head/sys/sys/umtx.h Modified: head/sys/kern/kern_umtx.c ============================================================================== --- head/sys/kern/kern_umtx.c Fri Oct 30 17:12:15 2015 (r290201) +++ head/sys/kern/kern_umtx.c Fri Oct 30 19:20:40 2015 (r290202) @@ -3439,43 +3439,44 @@ __umtx_op_sem2_wake(struct thread *td, s typedef int (*_umtx_op_func)(struct thread *td, struct _umtx_op_args *uap); -static _umtx_op_func op_table[] = { - __umtx_op_unimpl, /* UMTX_OP_RESERVED0 */ - __umtx_op_unimpl, /* UMTX_OP_RESERVED1 */ - __umtx_op_wait, /* UMTX_OP_WAIT */ - __umtx_op_wake, /* UMTX_OP_WAKE */ - __umtx_op_trylock_umutex, /* UMTX_OP_MUTEX_TRYLOCK */ - __umtx_op_lock_umutex, /* UMTX_OP_MUTEX_LOCK */ - __umtx_op_unlock_umutex, /* UMTX_OP_MUTEX_UNLOCK */ - __umtx_op_set_ceiling, /* UMTX_OP_SET_CEILING */ - __umtx_op_cv_wait, /* UMTX_OP_CV_WAIT*/ - __umtx_op_cv_signal, /* UMTX_OP_CV_SIGNAL */ - __umtx_op_cv_broadcast, /* UMTX_OP_CV_BROADCAST */ - __umtx_op_wait_uint, /* UMTX_OP_WAIT_UINT */ - __umtx_op_rw_rdlock, /* UMTX_OP_RW_RDLOCK */ - __umtx_op_rw_wrlock, /* UMTX_OP_RW_WRLOCK */ - __umtx_op_rw_unlock, /* UMTX_OP_RW_UNLOCK */ - __umtx_op_wait_uint_private, /* UMTX_OP_WAIT_UINT_PRIVATE */ - __umtx_op_wake_private, /* UMTX_OP_WAKE_PRIVATE */ - __umtx_op_wait_umutex, /* UMTX_OP_MUTEX_WAIT */ - __umtx_op_wake_umutex, /* UMTX_OP_MUTEX_WAKE */ +static const _umtx_op_func op_table[] = { + [UMTX_OP_RESERVED0] = __umtx_op_unimpl, + [UMTX_OP_RESERVED1] = __umtx_op_unimpl, + [UMTX_OP_WAIT] = __umtx_op_wait, + [UMTX_OP_WAKE] = __umtx_op_wake, + [UMTX_OP_MUTEX_TRYLOCK] = __umtx_op_trylock_umutex, + [UMTX_OP_MUTEX_LOCK] = __umtx_op_lock_umutex, + [UMTX_OP_MUTEX_UNLOCK] = __umtx_op_unlock_umutex, + [UMTX_OP_SET_CEILING] = __umtx_op_set_ceiling, + [UMTX_OP_CV_WAIT] = __umtx_op_cv_wait, + [UMTX_OP_CV_SIGNAL] = __umtx_op_cv_signal, + [UMTX_OP_CV_BROADCAST] = __umtx_op_cv_broadcast, + [UMTX_OP_WAIT_UINT] = __umtx_op_wait_uint, + [UMTX_OP_RW_RDLOCK] = __umtx_op_rw_rdlock, + [UMTX_OP_RW_WRLOCK] = __umtx_op_rw_wrlock, + [UMTX_OP_RW_UNLOCK] = __umtx_op_rw_unlock, + [UMTX_OP_WAIT_UINT_PRIVATE] = __umtx_op_wait_uint_private, + [UMTX_OP_WAKE_PRIVATE] = __umtx_op_wake_private, + [UMTX_OP_MUTEX_WAIT] = __umtx_op_wait_umutex, + [UMTX_OP_MUTEX_WAKE] = __umtx_op_wake_umutex, #if defined(COMPAT_FREEBSD9) || defined(COMPAT_FREEBSD10) - __umtx_op_sem_wait, /* UMTX_OP_SEM_WAIT */ - __umtx_op_sem_wake, /* UMTX_OP_SEM_WAKE */ + [UMTX_OP_SEM_WAIT] = __umtx_op_sem_wait, + [UMTX_OP_SEM_WAKE] = __umtx_op_sem_wake, #else - __umtx_op_unimpl, /* UMTX_OP_SEM_WAIT */ - __umtx_op_unimpl, /* UMTX_OP_SEM_WAKE */ + [UMTX_OP_SEM_WAIT] = __umtx_op_unimpl, + [UMTX_OP_SEM_WAKE] = __umtx_op_unimpl, #endif - __umtx_op_nwake_private, /* UMTX_OP_NWAKE_PRIVATE */ - __umtx_op_wake2_umutex, /* UMTX_OP_MUTEX_WAKE2 */ - __umtx_op_sem2_wait, /* UMTX_OP_SEM2_WAIT */ - __umtx_op_sem2_wake, /* UMTX_OP_SEM2_WAKE */ + [UMTX_OP_NWAKE_PRIVATE] = __umtx_op_nwake_private, + [UMTX_OP_MUTEX_WAKE2] = __umtx_op_wake2_umutex, + [UMTX_OP_SEM2_WAIT] = __umtx_op_sem2_wait, + [UMTX_OP_SEM2_WAKE] = __umtx_op_sem2_wake, }; int sys__umtx_op(struct thread *td, struct _umtx_op_args *uap) { - if ((unsigned)uap->op < UMTX_OP_MAX) + + if ((unsigned)uap->op < nitems(op_table)) return (*op_table[uap->op])(td, uap); return (EINVAL); } @@ -3734,44 +3735,46 @@ __umtx_op_nwake_private32(struct thread } static _umtx_op_func op_table_compat32[] = { - __umtx_op_unimpl, /* UMTX_OP_RESERVED0 */ - __umtx_op_unimpl, /* UMTX_OP_RESERVED1 */ - __umtx_op_wait_compat32, /* UMTX_OP_WAIT */ - __umtx_op_wake, /* UMTX_OP_WAKE */ - __umtx_op_trylock_umutex, /* UMTX_OP_MUTEX_LOCK */ - __umtx_op_lock_umutex_compat32, /* UMTX_OP_MUTEX_TRYLOCK */ - __umtx_op_unlock_umutex, /* UMTX_OP_MUTEX_UNLOCK */ - __umtx_op_set_ceiling, /* UMTX_OP_SET_CEILING */ - __umtx_op_cv_wait_compat32, /* UMTX_OP_CV_WAIT*/ - __umtx_op_cv_signal, /* UMTX_OP_CV_SIGNAL */ - __umtx_op_cv_broadcast, /* UMTX_OP_CV_BROADCAST */ - __umtx_op_wait_compat32, /* UMTX_OP_WAIT_UINT */ - __umtx_op_rw_rdlock_compat32, /* UMTX_OP_RW_RDLOCK */ - __umtx_op_rw_wrlock_compat32, /* UMTX_OP_RW_WRLOCK */ - __umtx_op_rw_unlock, /* UMTX_OP_RW_UNLOCK */ - __umtx_op_wait_uint_private_compat32, /* UMTX_OP_WAIT_UINT_PRIVATE */ - __umtx_op_wake_private, /* UMTX_OP_WAKE_PRIVATE */ - __umtx_op_wait_umutex_compat32, /* UMTX_OP_MUTEX_WAIT */ - __umtx_op_wake_umutex, /* UMTX_OP_MUTEX_WAKE */ + [UMTX_OP_RESERVED0] = __umtx_op_unimpl, + [UMTX_OP_RESERVED1] = __umtx_op_unimpl, + [UMTX_OP_WAIT] = __umtx_op_wait_compat32, + [UMTX_OP_WAKE] = __umtx_op_wake, + [UMTX_OP_MUTEX_LOCK] = __umtx_op_trylock_umutex, + [UMTX_OP_MUTEX_TRYLOCK] = __umtx_op_lock_umutex_compat32, + [UMTX_OP_MUTEX_UNLOCK] = __umtx_op_unlock_umutex, + [UMTX_OP_SET_CEILING] = __umtx_op_set_ceiling, + [UMTX_OP_CV_WAIT] = __umtx_op_cv_wait_compat32, + [UMTX_OP_CV_SIGNAL] = __umtx_op_cv_signal, + [UMTX_OP_CV_BROADCAST] = __umtx_op_cv_broadcast, + [UMTX_OP_WAIT_UINT] = __umtx_op_wait_compat32, + [UMTX_OP_RW_RDLOCK] = __umtx_op_rw_rdlock_compat32, + [UMTX_OP_RW_WRLOCK] = __umtx_op_rw_wrlock_compat32, + [UMTX_OP_RW_UNLOCK] = __umtx_op_rw_unlock, + [UMTX_OP_WAIT_UINT_PRIVATE] = __umtx_op_wait_uint_private_compat32, + [UMTX_OP_WAKE_PRIVATE] = __umtx_op_wake_private, + [UMTX_OP_MUTEX_WAIT] = __umtx_op_wait_umutex_compat32, + [UMTX_OP_MUTEX_WAKE] = __umtx_op_wake_umutex, #if defined(COMPAT_FREEBSD9) || defined(COMPAT_FREEBSD10) - __umtx_op_sem_wait_compat32, /* UMTX_OP_SEM_WAIT */ - __umtx_op_sem_wake, /* UMTX_OP_SEM_WAKE */ + [UMTX_OP_SEM_WAIT] = __umtx_op_sem_wait_compat32, + [UMTX_OP_SEM_WAKE] = __umtx_op_sem_wake, #else - __umtx_op_unimpl, /* UMTX_OP_SEM_WAIT */ - __umtx_op_unimpl, /* UMTX_OP_SEM_WAKE */ + [UMTX_OP_SEM_WAIT] = __umtx_op_unimpl, + [UMTX_OP_SEM_WAKE] = __umtx_op_unimpl, #endif - __umtx_op_nwake_private32, /* UMTX_OP_NWAKE_PRIVATE */ - __umtx_op_wake2_umutex, /* UMTX_OP_MUTEX_WAKE2 */ - __umtx_op_sem2_wait_compat32, /* UMTX_OP_SEM2_WAIT */ - __umtx_op_sem2_wake, /* UMTX_OP_SEM2_WAKE */ + [UMTX_OP_NWAKE_PRIVATE] = __umtx_op_nwake_private32, + [UMTX_OP_MUTEX_WAKE2] = __umtx_op_wake2_umutex, + [UMTX_OP_SEM2_WAIT] = __umtx_op_sem2_wait_compat32, + [UMTX_OP_SEM2_WAKE] = __umtx_op_sem2_wake, }; int freebsd32_umtx_op(struct thread *td, struct freebsd32_umtx_op_args *uap) { - if ((unsigned)uap->op < UMTX_OP_MAX) + + if ((unsigned)uap->op < nitems(op_table_compat32)) { return (*op_table_compat32[uap->op])(td, - (struct _umtx_op_args *)uap); + (struct _umtx_op_args *)uap); + } return (EINVAL); } #endif Modified: head/sys/sys/umtx.h ============================================================================== --- head/sys/sys/umtx.h Fri Oct 30 17:12:15 2015 (r290201) +++ head/sys/sys/umtx.h Fri Oct 30 19:20:40 2015 (r290202) @@ -83,7 +83,6 @@ #define UMTX_OP_MUTEX_WAKE2 22 #define UMTX_OP_SEM2_WAIT 23 #define UMTX_OP_SEM2_WAKE 24 -#define UMTX_OP_MAX 25 /* Flags for UMTX_OP_CV_WAIT */ #define CVWAIT_CHECK_UNPARKING 0x01
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201510301920.t9UJKf7b031954>