NAME | SYNOPSIS | API RESTRICTIONS | FEATURES | DESCRIPTION | RETURN VALUE | ERRORS | RESTRICTIONS | ATTRIBUTES | SEE ALSO
#include <mem/chMem.h>int rgnInitFromActor(KnCap *tgtactorcap, KnRgnDesc *tgtrgndesc, KnCap *srcactorcap, KnRgnDesc *srcrgndesc);
The function or functions documented here may not be used safely in all application contexts with all APIs provided in the ChorusOS 5.0 product.
See API(5FEA) for details.
MEM_PROTECTED, MEM_VIRTUAL
The rgnInitFromActor() function creates regions in a contiguous address range of the target actor address space. It then maps a copy of the segments or volatile memory already mapped on a range in the source actor's address space to the regions created.
The target and source actors are specified by tgtactorcap and srcactorcap, which are pointers to the capabilities of the target and source actors respectively. If srcactorcap or tgtactorcap is -K_MYACTOR, the address space of the current actor is used as the source or destination, respectively. If srcactorcap or tgtactorcap is -K_SVACTOR, the supervisor address space is used as the source or destination, respectively. If tgtactorcap is -K_SVACTOR, the allocated regions are not attached to any particular supervisor actor. Therefore, they cannot be implicitly deallocated by performing an actorDelete(2K) call on a supervisor actor.
The tgtrgndesc field points to a KnRgnDesc structure containing the specification for the target address attributes (options) for the regions to be created, as described in rgnAllocate(2K).
The srcrgndesc field points to another KnRgnDesc structure where only the startAddr and size fields are significant. It specifies the source range starting address and size respectively. The srcrgndesc->size must be less than or equal to tgtrgndesc->size. The source address range cannot contain holes. All addresses in the source address range must belong to a region.
The caller can specify any of the tgtrgndesc->options described in rgnAllocate(2K), apart from K_RESERVED, which is prohibited. Note that the K_FILLZERO option is interpreted differently here. Only the range from tgtrgndesc->startAddr + srcrgndesc->size to tgtrgndesc->startAddr + tgtrgndesc->size - 1 are filled with zeros. All regions in the target address range are created with the same attributes and are differentiated by the objects -- copies of particular segments or of particular volatile memory -- mapped to them.
If successful, K_OK is returned, otherwise a negative error code is returned.
Some of the arguments provided are outside the caller's address space.
An inconsistent actor capability was given.
actorcap does not specify a reachable actor.
tgtrgndesc->startAddr is not page-aligned.
srcrgndesc->startAddr is not page-aligned.
An attempt was made to create a region outside the valid range for the address space of an actor returned by vmStat(2K).
tgtrgndesc->size is zero.
The -K_ANYWHERE option was specified and there is not sufficient room available in the address space to create the regions.
The -K_RESTRICTIVE option was specified and there is not sufficient room in the target address range.
The regions created overlap with an existing region.
The source region is outside the valid range for the address space of an actor returned by vmStat(2K).
srcrgndesc->size is zero.
The source address range contains holes.
srcrgndesc->size is greater than tgtrgndesc->size.
The system is out of resources.
A segment mapper does not respect the microkernel/mapper protocol.
The target actor, the source actor and the current actor must be located on the same site.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
NAME | SYNOPSIS | API RESTRICTIONS | FEATURES | DESCRIPTION | RETURN VALUE | ERRORS | RESTRICTIONS | ATTRIBUTES | SEE ALSO