vm: replace vm-region with address-space
address-space is a non-recursive data structure, which contains a flat list of vm_areas representing mapped vm-objects. userspace programs can no longer create sub-address-spaces. instead, they can reserve portions of the address space, and use that reserved space to create mappings.
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
#ifndef KERNEL_SYSCALL_H_
|
||||
#define KERNEL_SYSCALL_H_
|
||||
|
||||
#include <kernel/address-space.h>
|
||||
#include <kernel/handle.h>
|
||||
#include <kernel/task.h>
|
||||
#include <kernel/vm-region.h>
|
||||
#include <kernel/vm.h>
|
||||
#include <mango/status.h>
|
||||
#include <mango/syscall.h>
|
||||
@@ -28,13 +28,13 @@ static inline bool __validate_access(
|
||||
vm_prot_t flags)
|
||||
{
|
||||
unsigned long irq_flags;
|
||||
vm_region_lock_irqsave(task->t_address_space, &irq_flags);
|
||||
bool result = vm_region_validate_access(
|
||||
address_space_lock_irqsave(task->t_address_space, &irq_flags);
|
||||
bool result = address_space_validate_access(
|
||||
task->t_address_space,
|
||||
(virt_addr_t)ptr,
|
||||
len,
|
||||
flags | VM_PROT_USER);
|
||||
vm_region_unlock_irqrestore(task->t_address_space, irq_flags);
|
||||
address_space_unlock_irqrestore(task->t_address_space, irq_flags);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -85,29 +85,19 @@ extern kern_status_t sys_vm_object_copy(
|
||||
size_t count,
|
||||
size_t *nr_copied);
|
||||
|
||||
extern kern_status_t sys_vm_region_create(
|
||||
kern_handle_t parent,
|
||||
const char *name,
|
||||
size_t name_len,
|
||||
off_t offset,
|
||||
size_t region_len,
|
||||
vm_prot_t prot,
|
||||
kern_handle_t *out,
|
||||
virt_addr_t *out_base_address);
|
||||
extern kern_status_t sys_vm_region_kill(kern_handle_t region);
|
||||
extern kern_status_t sys_vm_region_read(
|
||||
extern kern_status_t sys_address_space_read(
|
||||
kern_handle_t region,
|
||||
void *dst,
|
||||
off_t offset,
|
||||
virt_addr_t base,
|
||||
size_t count,
|
||||
size_t *nr_read);
|
||||
extern kern_status_t sys_vm_region_write(
|
||||
extern kern_status_t sys_address_space_write(
|
||||
kern_handle_t region,
|
||||
const void *src,
|
||||
off_t offset,
|
||||
virt_addr_t base,
|
||||
size_t count,
|
||||
size_t *nr_read);
|
||||
extern kern_status_t sys_vm_region_map_absolute(
|
||||
extern kern_status_t sys_address_space_map(
|
||||
kern_handle_t region,
|
||||
virt_addr_t map_address,
|
||||
kern_handle_t object,
|
||||
@@ -115,21 +105,18 @@ extern kern_status_t sys_vm_region_map_absolute(
|
||||
size_t length,
|
||||
vm_prot_t prot,
|
||||
virt_addr_t *out_base_address);
|
||||
extern kern_status_t sys_vm_region_map_relative(
|
||||
extern kern_status_t sys_address_space_unmap(
|
||||
kern_handle_t region,
|
||||
off_t region_offset,
|
||||
kern_handle_t object,
|
||||
off_t object_offset,
|
||||
size_t length,
|
||||
vm_prot_t prot,
|
||||
virt_addr_t *out_base_address);
|
||||
extern kern_status_t sys_vm_region_unmap_absolute(
|
||||
kern_handle_t region,
|
||||
virt_addr_t address,
|
||||
virt_addr_t base,
|
||||
size_t length);
|
||||
extern kern_status_t sys_vm_region_unmap_relative(
|
||||
extern kern_status_t sys_address_space_reserve(
|
||||
kern_handle_t region,
|
||||
off_t offset,
|
||||
virt_addr_t base,
|
||||
size_t length,
|
||||
virt_addr_t *out_base_address);
|
||||
extern kern_status_t sys_address_space_release(
|
||||
kern_handle_t region,
|
||||
virt_addr_t base,
|
||||
size_t length);
|
||||
|
||||
extern kern_status_t sys_kern_log(const char *s);
|
||||
|
||||
Reference in New Issue
Block a user