NAME
cpu_switchto
—
machine-dependent LWP context switching
interface
SYNOPSIS
#include
<sys/cpu.h>
lwp_t *
cpu_switchto
(lwp_t
*oldlwp, lwp_t
*newlwp, bool
returning);
DESCRIPTION
Thecpu_switchto
()
function saves the context of the LWP which is currently running on the
processor, and restores the context of the LWP specified by
newlwp.
Remarks:
cpu_switchto
() does not switch address spaces.cpu_switchto
() sets curlwp(9) to newlwp. If the architecture does non-interlocked adaptive mutex release,cpu_switchto
() does an equivalent of membar_producer(3), before and after the modification of curlwp(9).cpu_switchto
() should be called atIPL_SCHED
. When the function returns, the caller should lower the priority level as soon as possible.cpu_switchto
() might be called with spin mutexes held.
The function takes the following arguments.
- oldlwp
- Specify the LWP from which the switch is going to be made, i.e., the
calling LWP. If it was
NULL
, the context of the LWP currently running on this processor is not saved. - newlwp
- Specify the LWP to which to switch. It must not be
NULL
. - returning
- Only meaningful if the architecture implements fast software interrupts. If true, it indicates that oldlwp is a soft interrupt LWP that is blocking. It is a good indication that any kind of address space or user activity can be completely ignored. For example: ras_lookup(9), cache flushes, TLB wirings, adjusting lazy FPU state. All that is required is to restore the register state and stack, and return to the interrupted LWP.
RETURN VALUES
The cpu_switchto
() function does not
return until another LWP calls cpu_switchto
(). It
returns the oldlwp argument of the
cpu_switchto
() which is called to switch back to our
LWP. It is either a LWP which called cpu_switchto
()
to switch to us or NULL
in case the LWP was
exiting.
SEE ALSO
membar_producer(3), swapcontext(3), intro(9), mutex(9), spl(9)