UVM_MAP(9) | Kernel Developer's Manual | UVM_MAP(9) |
int
uvm_map(struct vm_map *map, vaddr_t *startp, vsize_t size, struct uvm_object *uobj, voff_t uoffset, vsize_t align, uvm_flag_t flags);
void
uvm_unmap(struct vm_map *map, vaddr_t start, vaddr_t end);
int
uvm_map_pageable(struct vm_map *map, vaddr_t start, vaddr_t end, bool new_pageable, int lockflags);
bool
uvm_map_checkprot(struct vm_map *map, vaddr_t start, vaddr_t end, vm_prot_t protection);
int
uvm_map_protect(struct vm_map *map, vaddr_t start, vaddr_t end, vm_prot_t new_prot, bool set_max);
int
uvm_deallocate(struct vm_map *map, vaddr_t start, vsize_t size);
struct vmspace *
uvmspace_alloc(vaddr_t min, vaddr_t max);
void
uvmspace_exec(struct lwp *l, vaddr_t start, vaddr_t end);
struct vmspace *
uvmspace_fork(struct vmspace *vm);
void
uvmspace_free(struct vmspace *vm);
void
uvmspace_share(struct proc *p1, struct proc *p2);
vaddr_t
uvm_uarea_alloc(void);
void
uvm_uarea_free(vaddr_t uaddr);
vaddr_t
uvm_uarea_system_alloc(void);
void
uvm_uarea_system_free(vaddr_t uaddr);
align specifies alignment of mapping unless UVM_FLAG_FIXED is specified in flags. align must be a power of 2.
flags passed to uvm_map() are typically created using the UVM_MAPFLAG(vm_prot_t prot, vm_prot_t maxprot, vm_inherit_t inh, int advice, int flags) macro, which uses the following values. The prot and maxprot can take are:
Additionally, the following constants for ORed values are available: UVM_PROT_RW, UVM_PROT_RX, UVM_PROT_WX and UVM_PROT_RWX.
The values that inh can take are:
The values that advice can take are:
The values that flags can take are:
The UVM_MAPFLAG macro arguments can be combined with an or operator. There are several special purpose macros for checking protection combinations, e.g., the UVM_PROT_WX. There are also some additional macros to extract bits from the flags. The UVM_PROTECTION, UVM_INHERIT, UVM_MAXPROTECTION and UVM_ADVICE macros return the protection, inheritance, maximum protection and advice, respectively. uvm_map() returns zero on success or error number otherwise.
uvm_unmap() removes a valid mapping, from start to end, in map map, which must be unlocked.
uvm_map_pageable() changes the pageability of the pages in the range from start to end in map map to new_pageable. uvm_map_pageable() returns zero on success or error number otherwise.
uvm_map_checkprot() checks the protection of the range from start to end in map map against protection. This returns either true or false.
uvm_map_protect() changes the protection start to end in map map to new_prot, also setting the maximum protection to the region to new_prot if set_max is true. This function returns a standard UVM return value.
uvm_deallocate() deallocates kernel memory in map map from address start to start + size.
uvmspace_alloc() allocates and returns a new address space, with ranges from min to max.
uvmspace_exec() either reuses the address space of thread l (its process) if there are no other references to it, or creates a new one with uvmspace_alloc(). The range of valid addresses in the address space is reset to start through end.
uvmspace_fork() creates and returns a new address space based upon the vm address space, typically used when allocating an address space for a child process.
uvmspace_free() lowers the reference count on the address space vm, freeing the data structures if there are no other references.
uvmspace_share() causes process p2 to share the address space of p1.
uvm_uarea_alloc() allocates memory for a u-area (i.e. kernel stack, PCB, etc) and returns the address.
uvm_uarea_free() frees a u-area allocated with uvm_uarea_alloc().
uvm_uarea_system_alloc() and uvm_uarea_system_free() are optimised routines, which are used for kernel threads.
June 3, 2011 | NetBSD 6.1 |