Remove references to asleep/await.
This commit is contained in:
parent
6208b149df
commit
98adb2ab0c
@ -152,7 +152,7 @@ MLINKS+=scheduler.9 roundrobin_interval.9 scheduler.9 sched_setup.9
|
||||
MLINKS+=scheduler.9 schedclock.9 scheduler.9 schedcpu.9
|
||||
MLINKS+=scheduler.9 setrunnable.9 scheduler.9 updatepri.9
|
||||
MLINKS+=sleep.9 tsleep.9 sleep.9 wakeup.9 sleep.9 wakeup_one.9
|
||||
MLINKS+=sleep.9 asleep.9 sleep.9 await.9 sleep.9 msleep.9
|
||||
MLINKS+=sleep.9 msleep.9
|
||||
MLINKS+=sleepqueue.9 endtsleep.9 sleepqueue.9 sleepinit.9
|
||||
MLINKS+=sleepqueue.9 unsleep.9
|
||||
MLINKS+=buf.9 bp.9
|
||||
|
@ -32,8 +32,6 @@
|
||||
.Nm sleep ,
|
||||
.Nm msleep ,
|
||||
.Nm tsleep ,
|
||||
.Nm asleep ,
|
||||
.Nm await ,
|
||||
.Nm wakeup
|
||||
.Nd wait for events
|
||||
.Sh SYNOPSIS
|
||||
@ -44,10 +42,6 @@
|
||||
.Fn tsleep "void *ident" "int priority" "const char *wmesg" "int timo"
|
||||
.Ft int
|
||||
.Fn msleep "void *ident" "struct mtx *mtx" "int priority" "const char *wmesg" "int timo"
|
||||
.Ft int
|
||||
.Fn asleep "void *ident" "int priority" "const char *wmesg" "int timo"
|
||||
.Ft int
|
||||
.Fn await "int priority" "int timo"
|
||||
.Ft void
|
||||
.Fn wakeup "void *ident"
|
||||
.Ft void
|
||||
@ -127,102 +121,6 @@ parameter will not be entered before returning. The mutex is
|
||||
used to ensure that a condition can be checked atomicly, and
|
||||
that the current process can be suspended without missing a
|
||||
change to the condition, or an associated wakeup.
|
||||
.Pp
|
||||
.Nm Asleep
|
||||
implements the new asynchronous sleep function. It takes the same arguments
|
||||
as
|
||||
.Fn tsleep
|
||||
and places the process on the appropriate wait queue, but
|
||||
.Fn asleep
|
||||
leaves the process runnable and returns immediately. The caller is then
|
||||
expected to, at some point in the future, call
|
||||
.Fn await
|
||||
to actually wait for the previously queued wait condition.
|
||||
If
|
||||
.Fn asleep
|
||||
is called several times, only the most recent call is effective.
|
||||
.Fn asleep
|
||||
may be called with an
|
||||
.Ar ident
|
||||
value of NULL
|
||||
to remove any previously queued condition.
|
||||
.Pp
|
||||
.Nm Await
|
||||
implements the new asynchronous wait function. When
|
||||
.Fn asleep
|
||||
is called on an identifier it associates the process with that
|
||||
identifier but does not block.
|
||||
.Fn await
|
||||
will actually block the process until
|
||||
.Fn wakeup
|
||||
is called on that identifier any time after the
|
||||
.Fn asleep .
|
||||
If
|
||||
.Fn wakeup
|
||||
is called after you
|
||||
.Fn asleep
|
||||
but before you
|
||||
.Fn await
|
||||
then the
|
||||
.Fn await
|
||||
call is effectively a NOP.
|
||||
If
|
||||
.Fn await
|
||||
is called multiple times without an intervening
|
||||
.Fn asleep ,
|
||||
the
|
||||
.Fn await
|
||||
is effectively a NOP but will also call
|
||||
.Fn mi_switch
|
||||
for safety. The
|
||||
.Fn await
|
||||
function allows you to override the priority and timeout values to be used.
|
||||
If the value -1 is specified for an argument, the value is taken from the
|
||||
previous
|
||||
.Fn asleep
|
||||
call. If -1 is passed for the priority you must be prepared to catch signal
|
||||
conditions if the prior call to
|
||||
.Fn asleep
|
||||
specified it in its priority. If -1 is passed for the timeout you must be
|
||||
prepared to catch a timeout condition if the prior call to
|
||||
.Fn asleep
|
||||
specified a timeout. When you use -1, it is usually a good idea to not make
|
||||
assumptions as to the arguments used by the prior
|
||||
.Fn asleep
|
||||
call.
|
||||
.Pp
|
||||
The
|
||||
.Fn asleep
|
||||
and
|
||||
.Fn await
|
||||
functions are mainly used by the kernel to shift the burden of blocking
|
||||
away from extremely low level routines and to push it onto their callers.
|
||||
This in turn allows more complex interlocking code to
|
||||
.Em backout
|
||||
of a temporary resource failure
|
||||
(such as lack of memory) in order to release major locks prior to actually
|
||||
blocking, and to then retry the operation on wakeup. This key feature is
|
||||
expected to be heavily used in SMP situations in order to allow code to make
|
||||
better use of spinlocks. A spinlock, by its very nature, cannot be used
|
||||
around code that might block. It is hoped that these capabilities will
|
||||
make it easier to migrate the SMP master locks deeper into the kernel.
|
||||
.Pp
|
||||
These routines may also be used to avoid nasty spl*() calls to get around
|
||||
race conditions with simple conditional test/wait interlocks. You simply
|
||||
call
|
||||
.Fn asleep
|
||||
prior to your test, then conditionally
|
||||
.Fn await
|
||||
only if the test fails. It is usually a good idea to cancel an
|
||||
.Fn asleep
|
||||
if you wind up never calling the related
|
||||
.Fn await ,
|
||||
but it is not required. If you do not want to waste cpu calling
|
||||
.Fn asleep
|
||||
unnecessarily, you can surround the whole thing with a second test. The
|
||||
race condition is still handled by the inside
|
||||
.Fn asleep
|
||||
call.
|
||||
.Sh RETURN VALUES
|
||||
See above.
|
||||
.Sh SEE ALSO
|
||||
@ -237,12 +135,6 @@ appeared in a very early version of Unix.
|
||||
appeared in
|
||||
.Bx 4.4 .
|
||||
.Pp
|
||||
.Nm Asleep Ns / Ns Nm await
|
||||
first appeared in
|
||||
.Fx 3.0
|
||||
and is designed to shift the burden of blocking
|
||||
away from extremely low level routines and push it up to their callers.
|
||||
.Pp
|
||||
.Nm Sleep
|
||||
used to be the traditional form. It doesn't let you specify a timeout or a
|
||||
.Ar wmesg ,
|
||||
@ -251,8 +143,3 @@ hence it has been discontinued.
|
||||
.An -nosplit
|
||||
This man page was written by
|
||||
.An J\(:org Wunsch .
|
||||
.Nm Asleep
|
||||
and
|
||||
.Nm await
|
||||
were designed and written by
|
||||
.An Matthew Dillon .
|
||||
|
Loading…
Reference in New Issue
Block a user