rmlock(9): add an RM_DUPOK flag

Allows for duplicate locks to be acquired without witness complaining.
Similar flags exists already for rwlock(9) and sx(9).

Reviewed by:	markj
MFC after:	3 days
Sponsored by:	NetApp, Inc.
Sponsored by:	Klara, Inc.
NetApp PR:	52
Differential Revision:	https://reviews.freebsd.org/D29683n
This commit is contained in:
Mitchell Horne 2021-04-08 14:41:19 -03:00
parent 034669e856
commit 2816bd8442
3 changed files with 7 additions and 1 deletions

View File

@ -26,7 +26,7 @@
.\" $FreeBSD$
.\"
.\" Based on rwlock.9 man page
.Dd December 27, 2019
.Dd April 12, 2021
.Dt RMLOCK 9
.Os
.Sh NAME
@ -186,6 +186,9 @@ will assert that the
has not been initialized multiple times without intervening calls to
.Fn rm_destroy
unless this option is specified.
.It Dv RM_DUPOK
.Xr witness 4
should not log messages about duplicate locks being acquired.
.El
.It Fn rm_rlock "struct rmlock *rm" "struct rm_priotracker* tracker"
Lock

View File

@ -289,6 +289,8 @@ rm_init_flags(struct rmlock *rm, const char *name, int opts)
liflags |= LO_RECURSABLE;
if (opts & RM_NEW)
liflags |= LO_NEW;
if (opts & RM_DUPOK)
liflags |= LO_DUPOK;
rm->rm_writecpus = all_cpus;
LIST_INIT(&rm->rm_activeReaders);
if (opts & RM_SLEEPABLE) {

View File

@ -48,6 +48,7 @@
#define RM_RECURSE 0x00000002
#define RM_SLEEPABLE 0x00000004
#define RM_NEW 0x00000008
#define RM_DUPOK 0x00000010
void rm_init(struct rmlock *rm, const char *name);
void rm_init_flags(struct rmlock *rm, const char *name, int opts);