From 61a8e6fc40d2bfcbad474b6bbce2ef08a44606af Mon Sep 17 00:00:00 2001 From: Max Wash Date: Sun, 19 Apr 2026 20:12:11 +0100 Subject: [PATCH] libmango: add syscalls to handle cow-attached vm-objects --- libmango/arch/x86_64/syscall.S | 2 + libmango/include-user/mango/vm.h | 8 +++ libmango/include/mango/syscall.h | 104 ++++++++++++++++--------------- 3 files changed, 63 insertions(+), 51 deletions(-) diff --git a/libmango/arch/x86_64/syscall.S b/libmango/arch/x86_64/syscall.S index 97f553f..28d70d7 100644 --- a/libmango/arch/x86_64/syscall.S +++ b/libmango/arch/x86_64/syscall.S @@ -102,6 +102,8 @@ SYSCALL_GATE vm_controller_create SYS_VM_CONTROLLER_CREATE 1 SYSCALL_GATE vm_controller_recv SYS_VM_CONTROLLER_RECV 2 SYSCALL_GATE vm_controller_recv_async SYS_VM_CONTROLLER_RECV_ASYNC 3 SYSCALL_GATE vm_controller_create_object SYS_VM_CONTROLLER_CREATE_OBJECT 7 +SYSCALL_GATE vm_controller_prepare_attach SYS_VM_CONTROLLER_PREPARE_ATTACH 3 +SYSCALL_GATE vm_controller_finish_attach SYS_VM_CONTROLLER_FINISH_ATTACH 3 SYSCALL_GATE vm_controller_detach_object SYS_VM_CONTROLLER_DETACH_OBJECT 2 SYSCALL_GATE vm_controller_supply_pages SYS_VM_CONTROLLER_SUPPLY_PAGES 6 diff --git a/libmango/include-user/mango/vm.h b/libmango/include-user/mango/vm.h index eb085d9..da1a0a7 100644 --- a/libmango/include-user/mango/vm.h +++ b/libmango/include-user/mango/vm.h @@ -80,6 +80,14 @@ extern kern_status_t vm_controller_create_object( size_t data_len, vm_prot_t prot, kern_handle_t *out); +extern kern_status_t vm_controller_prepare_attach( + kern_handle_t ctrl, + uint64_t req_id, + kern_handle_t *out_vmo); +extern kern_status_t vm_controller_finish_attach( + kern_handle_t ctrl, + uint64_t req_id, + equeue_key_t new_key); extern kern_status_t vm_controller_detach_object( kern_handle_t ctrl, kern_handle_t vmo); diff --git a/libmango/include/mango/syscall.h b/libmango/include/mango/syscall.h index fc388a1..a446f64 100644 --- a/libmango/include/mango/syscall.h +++ b/libmango/include/mango/syscall.h @@ -1,56 +1,58 @@ #ifndef MANGO_SYSCALL_H_ #define MANGO_SYSCALL_H_ -#define SYS_KERN_LOG 1 -#define SYS_KERN_HANDLE_CLOSE 2 -#define SYS_KERN_HANDLE_TRANSFER 3 -#define SYS_KERN_CONFIG_GET 4 -#define SYS_KERN_CONFIG_SET 5 -#define SYS_KERN_OBJECT_WAIT 6 -#define SYS_KERN_OBJECT_WAIT_ASYNC 7 -#define SYS_TASK_EXIT 8 -#define SYS_TASK_SELF 9 -#define SYS_TASK_CREATE 10 -#define SYS_TASK_CREATE_THREAD 11 -#define SYS_TASK_GET_ADDRESS_SPACE 12 -#define SYS_TASK_CONFIG_GET 13 -#define SYS_TASK_CONFIG_SET 14 -#define SYS_THREAD_SELF 15 -#define SYS_THREAD_START 16 -#define SYS_THREAD_EXIT 17 -#define SYS_THREAD_CONFIG_GET 18 -#define SYS_THREAD_CONFIG_SET 19 -#define SYS_VM_OBJECT_CREATE 20 -#define SYS_VM_OBJECT_READ 21 -#define SYS_VM_OBJECT_WRITE 22 -#define SYS_VM_OBJECT_COPY 23 -#define SYS_ADDRESS_SPACE_READ 24 -#define SYS_ADDRESS_SPACE_WRITE 25 -#define SYS_ADDRESS_SPACE_MAP 26 -#define SYS_ADDRESS_SPACE_UNMAP 27 -#define SYS_ADDRESS_SPACE_RESERVE 28 -#define SYS_ADDRESS_SPACE_RELEASE 29 -#define SYS_MSG_SEND 30 -#define SYS_MSG_RECV 31 -#define SYS_MSG_REPLY 32 -#define SYS_MSG_READ 33 -#define SYS_MSG_WRITE 34 -#define SYS_CHANNEL_CREATE 35 -#define SYS_PORT_CREATE 36 -#define SYS_PORT_CONNECT 37 -#define SYS_PORT_DISCONNECT 38 -#define SYS_EQUEUE_CREATE 39 -#define SYS_EQUEUE_DEQUEUE 40 -#define SYS_VM_CONTROLLER_CREATE 41 -#define SYS_VM_CONTROLLER_RECV 42 -#define SYS_VM_CONTROLLER_RECV_ASYNC 43 -#define SYS_VM_CONTROLLER_CREATE_OBJECT 44 -#define SYS_VM_CONTROLLER_DETACH_OBJECT 45 -#define SYS_VM_CONTROLLER_SUPPLY_PAGES 46 -#define SYS_FUTEX_WAIT 47 -#define SYS_FUTEX_WAKE 48 -#define SYS_KERN_OBJECT_QUERY 49 -#define SYS_TASK_DUPLICATE 50 -#define SYS_KERN_HANDLE_CONTROL 51 +#define SYS_KERN_LOG 1 +#define SYS_KERN_HANDLE_CLOSE 2 +#define SYS_KERN_HANDLE_TRANSFER 3 +#define SYS_KERN_HANDLE_CONTROL 4 +#define SYS_KERN_CONFIG_GET 5 +#define SYS_KERN_CONFIG_SET 6 +#define SYS_KERN_OBJECT_WAIT 7 +#define SYS_KERN_OBJECT_WAIT_ASYNC 8 +#define SYS_TASK_EXIT 9 +#define SYS_TASK_SELF 10 +#define SYS_TASK_CREATE 11 +#define SYS_TASK_CREATE_THREAD 12 +#define SYS_TASK_GET_ADDRESS_SPACE 13 +#define SYS_TASK_CONFIG_GET 14 +#define SYS_TASK_CONFIG_SET 15 +#define SYS_TASK_DUPLICATE 16 +#define SYS_THREAD_SELF 17 +#define SYS_THREAD_START 18 +#define SYS_THREAD_EXIT 19 +#define SYS_THREAD_CONFIG_GET 20 +#define SYS_THREAD_CONFIG_SET 21 +#define SYS_VM_OBJECT_CREATE 22 +#define SYS_VM_OBJECT_READ 23 +#define SYS_VM_OBJECT_WRITE 24 +#define SYS_VM_OBJECT_COPY 25 +#define SYS_ADDRESS_SPACE_READ 26 +#define SYS_ADDRESS_SPACE_WRITE 27 +#define SYS_ADDRESS_SPACE_MAP 28 +#define SYS_ADDRESS_SPACE_UNMAP 29 +#define SYS_ADDRESS_SPACE_RESERVE 30 +#define SYS_ADDRESS_SPACE_RELEASE 31 +#define SYS_MSG_SEND 32 +#define SYS_MSG_RECV 33 +#define SYS_MSG_REPLY 34 +#define SYS_MSG_READ 35 +#define SYS_MSG_WRITE 36 +#define SYS_CHANNEL_CREATE 37 +#define SYS_PORT_CREATE 38 +#define SYS_PORT_CONNECT 39 +#define SYS_PORT_DISCONNECT 40 +#define SYS_EQUEUE_CREATE 41 +#define SYS_EQUEUE_DEQUEUE 42 +#define SYS_VM_CONTROLLER_CREATE 43 +#define SYS_VM_CONTROLLER_RECV 44 +#define SYS_VM_CONTROLLER_RECV_ASYNC 45 +#define SYS_VM_CONTROLLER_CREATE_OBJECT 46 +#define SYS_VM_CONTROLLER_PREPARE_ATTACH 47 +#define SYS_VM_CONTROLLER_FINISH_ATTACH 48 +#define SYS_VM_CONTROLLER_DETACH_OBJECT 49 +#define SYS_VM_CONTROLLER_SUPPLY_PAGES 50 +#define SYS_FUTEX_WAIT 51 +#define SYS_FUTEX_WAKE 52 +#define SYS_KERN_OBJECT_QUERY 53 #endif