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:
@@ -68,14 +68,12 @@ SYSCALL_GATE vm_object_read SYS_VM_OBJECT_READ 5
|
||||
SYSCALL_GATE vm_object_write SYS_VM_OBJECT_WRITE 5
|
||||
SYSCALL_GATE vm_object_copy SYS_VM_OBJECT_COPY 6
|
||||
|
||||
SYSCALL_GATE vm_region_create SYS_VM_REGION_CREATE 8
|
||||
SYSCALL_GATE vm_region_kill SYS_VM_REGION_KILL 1
|
||||
SYSCALL_GATE vm_region_read SYS_VM_REGION_READ 5
|
||||
SYSCALL_GATE vm_region_write SYS_VM_REGION_WRITE 5
|
||||
SYSCALL_GATE vm_region_map_absolute SYS_VM_REGION_MAP_ABSOLUTE 7
|
||||
SYSCALL_GATE vm_region_map_relative SYS_VM_REGION_MAP_RELATIVE 7
|
||||
SYSCALL_GATE vm_region_unmap_absolute SYS_VM_REGION_UNMAP_ABSOLUTE 3
|
||||
SYSCALL_GATE vm_region_unmap_relative SYS_VM_REGION_UNMAP_RELATIVE 3
|
||||
SYSCALL_GATE address_space_read SYS_ADDRESS_SPACE_READ 5
|
||||
SYSCALL_GATE address_space_write SYS_ADDRESS_SPACE_WRITE 5
|
||||
SYSCALL_GATE address_space_map SYS_ADDRESS_SPACE_MAP 7
|
||||
SYSCALL_GATE address_space_unmap SYS_ADDRESS_SPACE_UNMAP 3
|
||||
SYSCALL_GATE address_space_reserve SYS_ADDRESS_SPACE_RESERVE 4
|
||||
SYSCALL_GATE address_space_release SYS_ADDRESS_SPACE_RELEASE 3
|
||||
|
||||
SYSCALL_GATE kern_log SYS_KERN_LOG 1
|
||||
SYSCALL_GATE kern_handle_close SYS_KERN_HANDLE_CLOSE 1
|
||||
|
||||
@@ -30,29 +30,19 @@ extern kern_status_t vm_object_copy(
|
||||
size_t count,
|
||||
size_t *nr_copied);
|
||||
|
||||
extern kern_status_t 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 vm_region_kill(kern_handle_t region);
|
||||
extern kern_status_t vm_region_read(
|
||||
extern kern_status_t 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 vm_region_write(
|
||||
extern kern_status_t 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 vm_region_map_absolute(
|
||||
extern kern_status_t address_space_map(
|
||||
kern_handle_t region,
|
||||
virt_addr_t map_address,
|
||||
kern_handle_t object,
|
||||
@@ -60,21 +50,18 @@ extern kern_status_t vm_region_map_absolute(
|
||||
size_t length,
|
||||
vm_prot_t prot,
|
||||
virt_addr_t *out_base_address);
|
||||
extern kern_status_t vm_region_map_relative(
|
||||
extern kern_status_t 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 vm_region_unmap_absolute(
|
||||
kern_handle_t region,
|
||||
virt_addr_t address,
|
||||
virt_addr_t base,
|
||||
size_t length);
|
||||
extern kern_status_t vm_region_unmap_relative(
|
||||
extern kern_status_t 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 address_space_release(
|
||||
kern_handle_t region,
|
||||
virt_addr_t base,
|
||||
size_t length);
|
||||
|
||||
extern kern_status_t vm_controller_create(kern_handle_t *out);
|
||||
|
||||
@@ -17,14 +17,12 @@
|
||||
#define SYS_VM_OBJECT_READ 0x0Du
|
||||
#define SYS_VM_OBJECT_WRITE 0x0Eu
|
||||
#define SYS_VM_OBJECT_COPY 0x0Fu
|
||||
#define SYS_VM_REGION_CREATE 0x10u
|
||||
#define SYS_VM_REGION_KILL 0x11u
|
||||
#define SYS_VM_REGION_READ 0x12u
|
||||
#define SYS_VM_REGION_WRITE 0x13u
|
||||
#define SYS_VM_REGION_MAP_ABSOLUTE 0x14u
|
||||
#define SYS_VM_REGION_MAP_RELATIVE 0x15u
|
||||
#define SYS_VM_REGION_UNMAP_ABSOLUTE 0x16u
|
||||
#define SYS_VM_REGION_UNMAP_RELATIVE 0x17u
|
||||
#define SYS_ADDRESS_SPACE_READ 0x12u
|
||||
#define SYS_ADDRESS_SPACE_WRITE 0x13u
|
||||
#define SYS_ADDRESS_SPACE_MAP 0x14u
|
||||
#define SYS_ADDRESS_SPACE_UNMAP 0x15u
|
||||
#define SYS_ADDRESS_SPACE_RESERVE 0x16u
|
||||
#define SYS_ADDRESS_SPACE_RELEASE 0x17u
|
||||
#define SYS_MSG_SEND 0x18u
|
||||
#define SYS_MSG_RECV 0x19u
|
||||
#define SYS_MSG_REPLY 0x1Au
|
||||
|
||||
@@ -12,7 +12,8 @@
|
||||
#define VM_PROT_NOCACHE 0x10u
|
||||
#define VM_PROT_MAP_SPECIFIC 0x40u
|
||||
|
||||
#define VM_REGION_ANY_OFFSET ((off_t) - 1)
|
||||
#define MAP_ADDRESS_ANY ((virt_addr_t) - 1)
|
||||
#define MAP_ADDRESS_INVALID ((virt_addr_t)0)
|
||||
#define KERN_HANDLE_INVALID ((kern_handle_t)0xFFFFFFFF)
|
||||
|
||||
#define KERN_CFG_INVALID 0x00u
|
||||
|
||||
Reference in New Issue
Block a user