diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-10-30 02:32:02 +0200 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-10-30 02:32:02 +0200 |
| commit | 7a23d95b6e432170d6575f515616e5936d53c85e (patch) | |
| tree | afdc349124ca40c4903b534f750f18e8527bf7c5 /include | |
| parent | e7b5881903ad81efee63966e7d2c42524d465dfc (diff) | |
| download | kmi-7a23d95b6e432170d6575f515616e5936d53c85e.tar.gz kmi-7a23d95b6e432170d6575f515616e5936d53c85e.zip | |
bookkeeping
Diffstat (limited to 'include')
| -rw-r--r-- | include/arch/proc.h | 7 | ||||
| -rw-r--r-- | include/arch/tcb.h | 6 | ||||
| -rw-r--r-- | include/arch/vmem.h | 12 | ||||
| -rw-r--r-- | include/kmi/bkl.h | 5 | ||||
| -rw-r--r-- | include/kmi/panic.h | 10 | ||||
| -rw-r--r-- | include/kmi/vmem.h | 8 |
6 files changed, 47 insertions, 1 deletions
diff --git a/include/arch/proc.h b/include/arch/proc.h index 7921e5c..b0f0944 100644 --- a/include/arch/proc.h +++ b/include/arch/proc.h @@ -127,6 +127,13 @@ __noreturn void run_init(struct tcb *t, vm_t fdt, vm_t initrd); * so I'm not too worried. */ __noreturn void ret_userspace_fast(); + +/** + * Return to userspace, restoring some registers. + * Mainly for returning from an ipc_resp, where the user is expected to save + * temporary registers on their own. + * Same as with \ref ret_userspace_fast(), skips canary checking. + */ __noreturn void ret_userspace_partial(); #endif /* KMI_ARCH_PROC_H */ diff --git a/include/arch/tcb.h b/include/arch/tcb.h index 8eddb07..18386d3 100644 --- a/include/arch/tcb.h +++ b/include/arch/tcb.h @@ -42,6 +42,12 @@ stat_t setup_rpc_stack(struct tcb *t); */ void destroy_rpc_stack(struct tcb *t); +/** + * Copy over contents in rpc stack from \p t to \p c. + * + * @param t 'Source'. + * @param c 'Destination'- + */ void copy_rpc_stack(struct tcb *t, struct tcb *c); /** diff --git a/include/arch/vmem.h b/include/arch/vmem.h index 0f06cc5..ad32519 100644 --- a/include/arch/vmem.h +++ b/include/arch/vmem.h @@ -167,11 +167,21 @@ struct vmem *create_vmem(); void use_vmem(struct vmem *b); /** - * Destroy virtual memory space. + * Completely destroy virtual memory space. + * Should only be called for ->proc.vmem, as it is the only one that is sure to + * own all nodes. * * @param b Virtual memory to destroy. */ void destroy_vmem(struct vmem *b); + +/** + * Destroy 'regular' virtual memory space. + * Should be called for ->rpc.vmem, as rpc can have some references that it + * doesn't own into ->proc.vmem, and this function is careful not to free those. + * + * @param b Virtual memory to destroy. + */ void destroy_rpcmem(struct vmem *b); /** diff --git a/include/kmi/bkl.h b/include/kmi/bkl.h index 8a56061..b77b08a 100644 --- a/include/kmi/bkl.h +++ b/include/kmi/bkl.h @@ -12,6 +12,11 @@ #include <kmi/lock.h> +/** + * Initialize Big Kernel Lock. + * In theory, the BKL being statically initialized to 0 should be enough, but + * this feels a bit safer. + */ void bkl_init(); /** Lock the Big Kernel Lock. */ diff --git a/include/kmi/panic.h b/include/kmi/panic.h index 121323c..0cfebc7 100644 --- a/include/kmi/panic.h +++ b/include/kmi/panic.h @@ -22,6 +22,16 @@ */ __noreturn void kernel_panic(void *pc, void *addr, long cause); +/** + * Call on some other, like userspace doing something that we currently can't + * deal with. Tries to reboot the system. Failing that, spin. + * Ideally registers and kernel state would be printed, but keep things simple + * for now. + * + * @param pc Address where fault occured. Should preferably be in the kernel. + * @param addr Possibly associated address. + * @param cause Possible error code associated with panic. Page fault, etc. + */ __noreturn void unhandled_panic(void *pc, void *addr, long cause); #endif /* KMI_PANIC_H */ diff --git a/include/kmi/vmem.h b/include/kmi/vmem.h index 9424e33..0f1832a 100644 --- a/include/kmi/vmem.h +++ b/include/kmi/vmem.h @@ -174,6 +174,14 @@ stat_t copy_uvmem(struct tcb *d, struct tcb *s); */ vmflags_t sanitize_uvflags(vmflags_t flags); +/** + * Handle page faults. + * If a page fault was to some legal address, the TLB is repopulated and the + * access is attempted again. Kind of like COW. + * Otherwise, the process gets killed (TODO) + * + * @param addr Address that caused a page fault. + */ void handle_pagefault(vm_t addr); #endif /* KMI_VMEM_H */ |
