kmo_return
kmo_return
Return from an invocation.
Signature
Status kmo_return(
Caddr args,
Csize args_size)
Arguments
- args - The address of the argument block to be passed to the new
address space.
- args_size - The size of the argument block to be passed.
Semantics
kmo_return terminates the current invocation and removes it from the
stack of outstanding invocations. The address space of the calling
locus
is changed to that defined for the invocation that is now at the top of the
stack. The point of execution is transferred to the instruction following the
call to
kmo_invoke
which caused the invocation to become nested. In the case that the current
invocation is the only outstanding invocation, the calling locus is forced to
return into the kernel where it is terminated.
The block of data defined by [args, args + args_size - 1]
is passed by value at the time of the call. The contents of the block can be
accessed from within the new address space following a call to
get_out_args.
Any data stored in certain architecture specific registers is preserved by the
invocation. These registers are currently defined for the Alpha AXP
archictecture.
Status
If a return from invocation is successful then the code following the call to
kmo_return is not executed so it does not make sense to return a Status
value. However, the call may fail and return the following Status values:
This occurs if the container from which the new address space is to be derived
no longer exists. This may occur if the container is destroyed after a nested
invocation has taken place.
This occurs if the call is attempting to pass an argument block which, due to
its size, would exhaust a kernel resource.