svn commit: r290202 - in head/sys: kern sys

Konstantin Belousov kib at FreeBSD.org
Fri Oct 30 19:20:42 UTC 2015


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


More information about the svn-src-head mailing list