aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2017-11-21 14:59:23 +0000
committerMark Johnston <markj@FreeBSD.org>2017-11-21 14:59:23 +0000
commit755230eb9f87f66fd4bd20862e73bad612e36199 (patch)
treeee9c735acaf1618e6019f215d9f0608a7ea8f182
parent2b378326f89d75b9612cc912f7fa2257cca9a97f (diff)
downloadsrc-755230eb9f87f66fd4bd20862e73bad612e36199.tar.gz
src-755230eb9f87f66fd4bd20862e73bad612e36199.zip
Clean up the SYSINIT_FLAGS definitions for rwlock(9) and rmlock(9).
Avoid duplication in their macro definitions, and document them. No functional change intended. MFC after: 1 week
Notes
Notes: svn path=/head/; revision=326060
-rw-r--r--share/man/man9/Makefile3
-rw-r--r--share/man/man9/rmlock.98
-rw-r--r--share/man/man9/rwlock.96
-rw-r--r--share/man/man9/sx.914
-rw-r--r--sys/kern/kern_rmlock.c13
-rw-r--r--sys/kern/kern_rwlock.c11
-rw-r--r--sys/sys/rmlock.h22
-rw-r--r--sys/sys/rwlock.h20
8 files changed, 35 insertions, 62 deletions
diff --git a/share/man/man9/Makefile b/share/man/man9/Makefile
index 400995fb0d6f..8b3783d21b3f 100644
--- a/share/man/man9/Makefile
+++ b/share/man/man9/Makefile
@@ -1548,6 +1548,7 @@ MLINKS+=rmlock.9 rm_assert.9 \
rmlock.9 rm_runlock.9 \
rmlock.9 rm_sleep.9 \
rmlock.9 RM_SYSINIT.9 \
+ rmlock.9 RM_SYSINIT_FLAGS.9 \
rmlock.9 rm_try_rlock.9 \
rmlock.9 rm_wlock.9 \
rmlock.9 rm_wowned.9 \
@@ -1580,6 +1581,7 @@ MLINKS+=rwlock.9 rw_assert.9 \
rwlock.9 rw_unlock.9 \
rwlock.9 rw_sleep.9 \
rwlock.9 RW_SYSINIT.9 \
+ rwlock.9 RW_SYSINIT_FLAGS.9 \
rwlock.9 rw_try_rlock.9 \
rwlock.9 rw_try_upgrade.9 \
rwlock.9 rw_try_wlock.9 \
@@ -1788,6 +1790,7 @@ MLINKS+=sx.9 sx_assert.9 \
sx.9 sx_slock_sig.9 \
sx.9 sx_sunlock.9 \
sx.9 SX_SYSINIT.9 \
+ sx.9 SX_SYSINIT_FLAGS.9 \
sx.9 sx_try_slock.9 \
sx.9 sx_try_upgrade.9 \
sx.9 sx_try_xlock.9 \
diff --git a/share/man/man9/rmlock.9 b/share/man/man9/rmlock.9
index ee033a6bc6b0..d56d97cef6e1 100644
--- a/share/man/man9/rmlock.9
+++ b/share/man/man9/rmlock.9
@@ -26,7 +26,7 @@
.\" $FreeBSD$
.\"
.\" Based on rwlock.9 man page
-.Dd December 13, 2014
+.Dd November 11, 2017
.Dt RMLOCK 9
.Os
.Sh NAME
@@ -42,7 +42,8 @@
.Nm rm_wowned ,
.Nm rm_sleep ,
.Nm rm_assert ,
-.Nm RM_SYSINIT
+.Nm RM_SYSINIT ,
+.Nm RM_SYSINIT_FLAGS
.Nd kernel reader/writer lock optimized for read-mostly access patterns
.Sh SYNOPSIS
.In sys/param.h
@@ -74,7 +75,8 @@
.Ft void
.Fn rm_assert "struct rmlock *rm" "int what"
.In sys/kernel.h
-.Fn RM_SYSINIT "name" "struct rmlock *rm" "const char *desc" "int opts"
+.Fn RM_SYSINIT "name" "struct rmlock *rm" "const char *desc"
+.Fn RM_SYSINIT_FLAGS "name" "struct rmlock *rm" "const char *desc" "int flags"
.Sh DESCRIPTION
Read-mostly locks allow shared access to protected data by multiple threads,
or exclusive access by a single thread.
diff --git a/share/man/man9/rwlock.9 b/share/man/man9/rwlock.9
index 9ee16fc7cebc..a23b44b278e3 100644
--- a/share/man/man9/rwlock.9
+++ b/share/man/man9/rwlock.9
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 28, 2016
+.Dd November 11, 2017
.Dt RWLOCK 9
.Os
.Sh NAME
@@ -45,7 +45,8 @@
.Nm rw_initialized ,
.Nm rw_wowned ,
.Nm rw_assert ,
-.Nm RW_SYSINIT
+.Nm RW_SYSINIT ,
+.Nm RW_SYSINIT_FLAGS
.Nd kernel reader/writer lock
.Sh SYNOPSIS
.In sys/param.h
@@ -88,6 +89,7 @@
.Fn rw_assert "const struct rwlock *rw" "int what"
.In sys/kernel.h
.Fn RW_SYSINIT "name" "struct rwlock *rw" "const char *desc"
+.Fn RW_SYSINIT_FLAGS "name" "struct rwlock *rw" "const char *desc" "int flags"
.Sh DESCRIPTION
Reader/writer locks allow shared access to protected data by multiple threads,
or exclusive access by a single thread.
diff --git a/share/man/man9/sx.9 b/share/man/man9/sx.9
index f09584a91222..a911e07e083a 100644
--- a/share/man/man9/sx.9
+++ b/share/man/man9/sx.9
@@ -26,7 +26,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 28, 2016
+.Dd November 11, 2017
.Dt SX 9
.Os
.Sh NAME
@@ -49,7 +49,8 @@
.Nm sx_xholder ,
.Nm sx_xlocked ,
.Nm sx_assert ,
-.Nm SX_SYSINIT
+.Nm SX_SYSINIT ,
+.Nm SX_SYSINIT_FLAGS
.Nd kernel shared/exclusive lock
.Sh SYNOPSIS
.In sys/param.h
@@ -95,7 +96,8 @@
.Ft void
.Fn sx_assert "const struct sx *sx" "int what"
.In sys/kernel.h
-.Fn SX_SYSINIT "name" "struct sx *sx" "const char *description"
+.Fn SX_SYSINIT "name" "struct sx *sx" "const char *desc"
+.Fn SX_SYSINIT_FLAGS "name" "struct sx *sx" "const char *desc" "int flags"
.Sh DESCRIPTION
Shared/exclusive locks are used to protect data that are read far more often
than they are written.
@@ -295,6 +297,12 @@ but with an additional argument,
.Fa name ,
that is used in generating unique variable names for the related
structures associated with the lock and the sysinit routine.
+The
+.Fn SX_SYSINIT_FLAGS
+macro can similarly be used to initialize a given
+.Fa sx
+lock using
+.Fn sx_init_flags .
.Pp
A thread may not hold both a shared lock and an exclusive lock on the same
lock simultaneously;
diff --git a/sys/kern/kern_rmlock.c b/sys/kern/kern_rmlock.c
index 123b24845f8e..a77fa946e4bf 100644
--- a/sys/kern/kern_rmlock.c
+++ b/sys/kern/kern_rmlock.c
@@ -338,17 +338,10 @@ rm_wowned(const struct rmlock *rm)
void
rm_sysinit(void *arg)
{
- struct rm_args *args = arg;
+ struct rm_args *args;
- rm_init(args->ra_rm, args->ra_desc);
-}
-
-void
-rm_sysinit_flags(void *arg)
-{
- struct rm_args_flags *args = arg;
-
- rm_init_flags(args->ra_rm, args->ra_desc, args->ra_opts);
+ args = arg;
+ rm_init_flags(args->ra_rm, args->ra_desc, args->ra_flags);
}
static int
diff --git a/sys/kern/kern_rwlock.c b/sys/kern/kern_rwlock.c
index 6cd6e3da4cc7..393979947ce8 100644
--- a/sys/kern/kern_rwlock.c
+++ b/sys/kern/kern_rwlock.c
@@ -240,16 +240,9 @@ _rw_destroy(volatile uintptr_t *c)
void
rw_sysinit(void *arg)
{
- struct rw_args *args = arg;
-
- rw_init((struct rwlock *)args->ra_rw, args->ra_desc);
-}
-
-void
-rw_sysinit_flags(void *arg)
-{
- struct rw_args_flags *args = arg;
+ struct rw_args *args;
+ args = arg;
rw_init_flags((struct rwlock *)args->ra_rw, args->ra_desc,
args->ra_flags);
}
diff --git a/sys/sys/rmlock.h b/sys/sys/rmlock.h
index b065df42b6f4..da5d7274e780 100644
--- a/sys/sys/rmlock.h
+++ b/sys/sys/rmlock.h
@@ -103,35 +103,21 @@ void _rm_assert(const struct rmlock *rm, int what, const char *file,
struct rm_args {
struct rmlock *ra_rm;
const char *ra_desc;
+ int ra_flags;
};
-struct rm_args_flags {
- struct rmlock *ra_rm;
- const char *ra_desc;
- int ra_opts;
-};
-
-#define RM_SYSINIT(name, rm, desc) \
+#define RM_SYSINIT_FLAGS(name, rm, desc, flags) \
static struct rm_args name##_args = { \
(rm), \
(desc), \
+ (flags), \
}; \
SYSINIT(name##_rm_sysinit, SI_SUB_LOCK, SI_ORDER_MIDDLE, \
rm_sysinit, &name##_args); \
SYSUNINIT(name##_rm_sysuninit, SI_SUB_LOCK, SI_ORDER_MIDDLE, \
rm_destroy, (rm))
-
-#define RM_SYSINIT_FLAGS(name, rm, desc, opts) \
- static struct rm_args name##_args = { \
- (rm), \
- (desc), \
- (opts), \
- }; \
- SYSINIT(name##_rm_sysinit, SI_SUB_LOCK, SI_ORDER_MIDDLE, \
- rm_sysinit_flags, &name##_args); \
- SYSUNINIT(name##_rm_sysuninit, SI_SUB_LOCK, SI_ORDER_MIDDLE, \
- rm_destroy, (rm))
+#define RM_SYSINIT(name, rm, desc) RM_SYSINIT_FLAGS(name, rm, desc, 0)
#if defined(INVARIANTS) || defined(INVARIANT_SUPPORT)
#define RA_LOCKED LA_LOCKED
diff --git a/sys/sys/rwlock.h b/sys/sys/rwlock.h
index aa4b0cc2ab76..cd888259d9f3 100644
--- a/sys/sys/rwlock.h
+++ b/sys/sys/rwlock.h
@@ -220,35 +220,21 @@ void __rw_assert(const volatile uintptr_t *c, int what, const char *file,
struct rw_args {
void *ra_rw;
const char *ra_desc;
-};
-
-struct rw_args_flags {
- void *ra_rw;
- const char *ra_desc;
int ra_flags;
};
-#define RW_SYSINIT(name, rw, desc) \
+#define RW_SYSINIT_FLAGS(name, rw, desc, flags) \
static struct rw_args name##_args = { \
(rw), \
(desc), \
+ (flags), \
}; \
SYSINIT(name##_rw_sysinit, SI_SUB_LOCK, SI_ORDER_MIDDLE, \
rw_sysinit, &name##_args); \
SYSUNINIT(name##_rw_sysuninit, SI_SUB_LOCK, SI_ORDER_MIDDLE, \
_rw_destroy, __DEVOLATILE(void *, &(rw)->rw_lock))
-
-#define RW_SYSINIT_FLAGS(name, rw, desc, flags) \
- static struct rw_args_flags name##_args = { \
- (rw), \
- (desc), \
- (flags), \
- }; \
- SYSINIT(name##_rw_sysinit, SI_SUB_LOCK, SI_ORDER_MIDDLE, \
- rw_sysinit_flags, &name##_args); \
- SYSUNINIT(name##_rw_sysuninit, SI_SUB_LOCK, SI_ORDER_MIDDLE, \
- _rw_destroy, __DEVOLATILE(void *, &(rw)->rw_lock))
+#define RW_SYSINIT(name, rw, desc) RW_SYSINIT_FLAGS(name, rw, desc, 0)
/*
* Options passed to rw_init_flags().