diff options
author | Mateusz Guzik <mjg@FreeBSD.org> | 2019-12-27 11:19:57 +0000 |
---|---|---|
committer | Mateusz Guzik <mjg@FreeBSD.org> | 2019-12-27 11:19:57 +0000 |
commit | 1f162fef76a04af66a7cec59a84a4adf7d2000c6 (patch) | |
tree | e5156cdc174e15c785048493851fc19540d0142c /sys/sys | |
parent | e99c4e4d6449626eda1934a2bdb80ab80621c8a6 (diff) | |
download | src-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.h | 10 | ||||
-rw-r--r-- | sys/sys/rmlock.h | 7 |
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_ */ |