NAME | SYNOPSIS | API RESTRICTIONS | FEATURES | DESCRIPTION | RETURN VALUES | ERRORS | ATTRIBUTES | SEE ALSO
#include <mem/chMem.h>int svPagesAllocate(VmAddr * address, VmSize size, VmFlags flags, KnCap * actcap);
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_FLAT, MEM_PROTECTED, MEM_VIRTUAL
The svPagesAllocate() function allocates an amount of (usually discontiguous) physical memory and a range of virtual addresses within the supervisor address space. It then maps the physical memory to this address range.
The size argument specifies the size (in bytes) of the memory to be allocated. There are no alignment requirements on the size value, but svPagesAllocate() always aligns the size of allocated memory to the next page boundary.
The starting address of the allocated virtual memory range is returned in the variable pointed to by the address argument.
The flags argument is a combination of the following flags:
This flag is handled only for the VM memory model and is ignored for the protected and flat memory models.
If the K_NOWAITFORMEMORY flag is set, svPagesAllocate() fails when there is not enough physical memory. In this case it returns the K_ENOMEM error. Otherwise, svPagesAllocate() waits for memory to become available as the result of memory swap out activity. If the swap out is not available svPagesAllocate() will never wait.
This flag is for internal operating system usage only.
The actcap argument specifies an actor with which the allocated memory will be associated. It is required for various functions, such as actor dumps. Note that allocated memory is not automatically freed when the corresponding actor is deleted using actorDelete(2K) . If the actor association is not needed, K_SVACTOR can be specified. In this case the memory will be anonymous (not linked to any actor).
The svPagesFree() call releases a virtual address range and the physical memory mapped to it. The address argument specifies the range's starting address and the size argument specifies its size in bytes.
The address range must be a sub-range of an address range previously allocated by an svPagesAllocate() call. The range start address must be page aligned but there are no alignment requirements on the range size. Nevertheless svPagesFree() always aligns the size of deallocated memory to the next page boundary.
The svPagesAllocate() and svPagesFree() calls should not be called by an interrupt handler.
The actcap argument specifies the actor from which the pages must be detached. This actor must match the actor that was specified when the pages were allocated.
If successful, K_OK is returned. Otherwise, a negative error code is returned.
The address argument points to outside the caller's address space. K_EFAULT cannot be returned in the FLAT memory model.
svPagesAllocate() was called by an interrupt handler and the K_NOWAITFORMEMORY flag was not specified.
The address argument of svPagesFree() is not page aligned.
The size argument is equal to 0.
The system is out of memory.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
NAME | SYNOPSIS | API RESTRICTIONS | FEATURES | DESCRIPTION | RETURN VALUES | ERRORS | ATTRIBUTES | SEE ALSO