epoch(9): update man page for r335924

This commit is contained in:
Matt Macy 2018-07-04 03:44:36 +00:00
parent cc535c95ca
commit 68195696a6
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=335929

View File

@ -49,11 +49,11 @@
.Ft void
.Fn epoch_enter "epoch_t epoch"
.Ft void
.Fn epoch_enter_preempt "epoch_t epoch"
.Fn epoch_enter_preempt "epoch_t epoch" "epoch_tracker_t et"
.Ft void
.Fn epoch_exit "epoch_t epoch"
.Ft void
.Fn epoch_exit_preempt "epoch_t epoch"
.Fn epoch_exit_preempt "epoch_t epoch" "epoch_tracker_t et"
.Ft void
.Fn epoch_wait "epoch_t epoch"
.Ft void
@ -104,12 +104,16 @@ INVARIANTS can assert that a thread is in an epoch by using
.Fn in_epoch .
.Pp
The epoch API currently does not support sleeping in epoch_preempt sections.
A caller cannot do epoch_enter recursively on different preemptible epochs.
A caller should never call
.Fn epoch_wait
in the middle of an epoch section as this will lead to a deadlock.
in the middle of an epoch section for the same epoch as this will lead to a deadlock.
.Pp
Note that epochs are not a straight replacement for read locks.
Be default mutexes cannot be held across
.Fn epoch_wait_preempt .
To permit this the epoch must be allocated with
.Fn EPOCH_LOCKED .
When doing this one must be cautious of creating a situation where a deadlock is
possible. Note that epochs are not a straight replacement for read locks.
Callers must use safe list and tailq traversal routines in an epoch (see ck_queue).
When modifying a list referenced from an epoch section safe removal
routines must be used and the caller can no longer modify a list entry