mpsleep - General: Blocks the current kernel thread
int mpsleep(
caddr_t channel,
long pri,
char *wmesg,
long timo,
void *lockp,
long flags );
Specifies an address associated with the calling kernel
thread to be blocked. Can specify the following values:
When set, specifies that the sleep request is interruptible.
That is, the kernel thread can take asynchronous
signals. Not setting the PCATCH flag causes the process to
sleep in an uninterruptible state. When set, specifies
that the process can be asynchronously suspended while
waiting.
On the operating system you cannot use pri to set
the scheduling priority of the calling process.
Specifies a mnemonic for the type of wait. The ps
command uses this mnemonic in its messages about
the process. Specifies the maximum amount of time
the kernel thread should block. The kernel thread
blocks a maximum of timo divided by hz seconds. If
you pass the value 0 (zero), mpsleep assumes there
is no timeout. Specifies a pointer to a lock
structure that you want to unlock before the process
sleeps. If you do not want to release a lock,
pass the value 0 (zero). Specifies the lock type
of the lockp argument and how to handle the lock
after blocking.
You can specify one of the following valid lock
types, defined in the <param.h> file: Calls mpsleep
with a simple lock asserted. Calls mpsleep with a
read-only lock asserted on entry. Calls mpsleep
with a write lock asserted.
In addition, you can specify one of the following
ways to handle the lock after blocking: Forces
mpsleep to relock the lock on failure. Forces
mpsleep not to relock after blocking.
The mpsleep routine blocks (puts to sleep) the current
kernel thread until a wakeup is issued on the address you
specify in the channel argument. This routine is the symmetric
multiprocessor (SMP) sleep call. The kernel thread
blocks a maximum of timo divided by hz seconds. The value0
(zero) means there is no timeout.
If you pass the PCATCH flag to the pri argument, the sleep
request is interruptible, and the kernel thread can take
asynchronous signals. If you pass the PSUSP flag, the process
can be asynchronously suspended while waiting.
The mpsleep routine allows you to specify a pointer to a
simple or complex lock structure that is associated with
some resource. If the MS_LOCK_NO_RELOCK flag is set, it
does not relock the lock after blocking. If the
MS_LOCK_ON_ERROR flag is set (or no flag is set), mpsleep
relocks the lock on failure.
This routine is not intended for general use. It is
mostly used by sleep and tsleep and by knowledgeable
callers.
The mpsleep routine cannot be called from within an Interrupt
Service routine (ISI) because it is illegal to block
at interrupt context.
The mpsleep routine returns the following values: Successful
completion. The sleep has been interrupted by a signal.
The sleep has been interrupted by a signal on a
restartable system call. The timeout has expired.
Routines: assert_wait_mesg(9r), clear_wait(9r),
thread_block(9r), thread_wakeup(9r), thread_wakeup_one(9r)
mpsleep(9r)
[ Back ] |