aboutsummaryrefslogtreecommitdiff
path: root/sys/sys
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2019-12-27 11:19:57 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2019-12-27 11:19:57 +0000
commit1f162fef76a04af66a7cec59a84a4adf7d2000c6 (patch)
treee5156cdc174e15c785048493851fc19540d0142c /sys/sys
parente99c4e4d6449626eda1934a2bdb80ab80621c8a6 (diff)
downloadsrc-1f162fef76a04af66a7cec59a84a4adf7d2000c6.tar.gz
src-1f162fef76a04af66a7cec59a84a4adf7d2000c6.zip
Add read-mostly sleepable locks
To be used when like rmlocks, except when sleeping for readers needs to be allowed. See the manpage for more information. Reviewed by: kib (previous version) Differential Revision: https://reviews.freebsd.org/D22823
Notes
Notes: svn path=/head/; revision=356119
Diffstat (limited to 'sys/sys')
-rw-r--r--sys/sys/_rmlock.h10
-rw-r--r--sys/sys/rmlock.h7
2 files changed, 17 insertions, 0 deletions
diff --git a/sys/sys/_rmlock.h b/sys/sys/_rmlock.h
index 89a25ee68798..68ddc3b3fb03 100644
--- a/sys/sys/_rmlock.h
+++ b/sys/sys/_rmlock.h
@@ -68,4 +68,14 @@ struct rm_priotracker {
LIST_ENTRY(rm_priotracker) rmp_qentry;
};
+#include <sys/_mutex.h>
+
+struct rmslock {
+ struct mtx mtx;
+ int writers;
+ int readers;
+ int *readers_pcpu;
+ int *readers_influx;
+};
+
#endif /* !_SYS__RMLOCK_H_ */
diff --git a/sys/sys/rmlock.h b/sys/sys/rmlock.h
index cdcb6edc3b92..0fd4406d0886 100644
--- a/sys/sys/rmlock.h
+++ b/sys/sys/rmlock.h
@@ -133,5 +133,12 @@ struct rm_args {
#define rm_assert(rm, what)
#endif
+void rms_init(struct rmslock *rms, const char *name);
+void rms_destroy(struct rmslock *rms);
+void rms_rlock(struct rmslock *rms);
+void rms_runlock(struct rmslock *rms);
+void rms_wlock(struct rmslock *rms);
+void rms_wunlock(struct rmslock *rms);
+
#endif /* _KERNEL */
#endif /* !_SYS_RMLOCK_H_ */