kmo_return


kmo_return

Return from an invocation.

Signature

Status kmo_return(
	Caddr	args,
	Csize	args_size)

Arguments

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.