mm: rename vmm api to mm

This commit is contained in:
Matheus
2026-07-01 14:57:05 -03:00
parent c650036cfe
commit 239c267ed3
47 changed files with 402 additions and 413 deletions
+10 -10
View File
@@ -3,7 +3,7 @@
#include <errno.h>
#include <kernel/alloc.h>
#include <util.h>
#include <kernel/vmm.h>
#include <kernel/mm.h>
#include <kernel/usercopy.h>
#include <arch/cpu.h>
@@ -67,7 +67,7 @@ static int load(vnode_t *vnode, elfph64_t *ph) {
size_t firstpagecount = PAGE_SIZE - firstpageoffset;
firstpagecount = fsize > firstpagecount ? firstpagecount : fsize;
void *page = (void *)ROUND_DOWN(mempos, PAGE_SIZE);
if (vmm_map(page, PAGE_SIZE, VMM_FLAGS_EXACT | VMM_FLAGS_ALLOCATE, ARCH_MMU_FLAGS_USER | ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE, NULL) == NULL)
if (mm_map(page, PAGE_SIZE, MM_RANGE_FLAGS_EXACT | MM_RANGE_FLAGS_ALLOCATE, ARCH_MMU_FLAGS_USER | ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE, NULL) == NULL)
return ENOMEM;
error = readexact(vnode, (void *)mempos, firstpagecount, foffset);
@@ -98,7 +98,7 @@ static int load(vnode_t *vnode, elfph64_t *ph) {
mempos += remainingmsize;
}
error = vmm_changemmuflags(page, PAGE_SIZE, mmuflags, 0);
error = mm_change_mmu_flags(page, PAGE_SIZE, mmuflags, 0);
if (error)
return error;
}
@@ -106,11 +106,11 @@ static int load(vnode_t *vnode, elfph64_t *ph) {
// map middle of file
size_t filepagecount = fsize / PAGE_SIZE;
if (filepagecount) {
vmmfiledesc_t vfd = {
mm_map_file_desc_t vfd = {
.node = vnode,
.offset = foffset
};
if (vmm_map((void *)mempos, filepagecount, VMM_FLAGS_EXACT | VMM_FLAGS_PAGESIZE | VMM_FLAGS_FILE, mmuflags, &vfd) == NULL)
if (mm_map((void *)mempos, filepagecount, MM_RANGE_FLAGS_EXACT | MM_RANGE_FLAGS_PAGESIZE | MM_RANGE_FLAGS_FILE, mmuflags, &vfd) == NULL)
return ENOMEM;
size_t bytesize = filepagecount * PAGE_SIZE;
mempos += bytesize;
@@ -122,7 +122,7 @@ static int load(vnode_t *vnode, elfph64_t *ph) {
// map end of file
size_t lastpagecount = fsize % PAGE_SIZE;
if (lastpagecount) {
if (vmm_map((void *)mempos, PAGE_SIZE, VMM_FLAGS_EXACT | VMM_FLAGS_ALLOCATE, ARCH_MMU_FLAGS_USER | ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE, NULL) == NULL)
if (mm_map((void *)mempos, PAGE_SIZE, MM_RANGE_FLAGS_EXACT | MM_RANGE_FLAGS_ALLOCATE, ARCH_MMU_FLAGS_USER | ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE, NULL) == NULL)
return ENOMEM;
error = readexact(vnode, (void *)mempos, lastpagecount, foffset);
@@ -135,7 +135,7 @@ static int load(vnode_t *vnode, elfph64_t *ph) {
msize -= msize > PAGE_SIZE ? PAGE_SIZE : msize;
error = vmm_changemmuflags((void *)mempos, PAGE_SIZE, mmuflags, 0);
error = mm_change_mmu_flags((void *)mempos, PAGE_SIZE, mmuflags, 0);
if (error)
return error;
@@ -144,7 +144,7 @@ static int load(vnode_t *vnode, elfph64_t *ph) {
// zero some parts if needed
if (msize) {
if (vmm_map((void *)mempos, msize, VMM_FLAGS_EXACT, mmuflags, NULL) == NULL)
if (mm_map((void *)mempos, msize, MM_RANGE_FLAGS_EXACT, mmuflags, NULL) == NULL)
return ENOMEM;
}
@@ -255,12 +255,12 @@ void *elf_preparestack(void *top, auxv64list_t *auxv64, char **argv, char **envp
size_t initialsizeround = ROUND_UP(initialsize, PAGE_SIZE);
void *initialpagebase = (void *)((uintptr_t)top - initialsizeround);
if (vmm_map(initialpagebase, initialsizeround, VMM_FLAGS_ALLOCATE | VMM_FLAGS_EXACT, STACK_MMUFLAGS, NULL) == NULL)
if (mm_map(initialpagebase, initialsizeround, MM_RANGE_FLAGS_ALLOCATE | MM_RANGE_FLAGS_EXACT, STACK_MMUFLAGS, NULL) == NULL)
return NULL;
void *stackbase = (void *)((uintptr_t)top - STACK_SIZE);
size_t unallocatedsize = STACK_SIZE - initialsizeround;
if (vmm_map(stackbase, unallocatedsize, VMM_FLAGS_EXACT, STACK_MMUFLAGS, NULL) == NULL)
if (mm_map(stackbase, unallocatedsize, MM_RANGE_FLAGS_EXACT, STACK_MMUFLAGS, NULL) == NULL)
return NULL;
top = (void *)((uintptr_t)top - STACK_TOP_BUFFER);
+5 -5
View File
@@ -367,11 +367,11 @@ void proc_run_init() {
printf("proc: loading %s\n", init_path);
vmmcontext_t *vmmctx = vmm_newcontext();
__assert(vmmctx);
mm_context_t *mmctx = mm_create_context();
__assert(mmctx);
// leave kernel context to load elf
vmm_switchcontext(vmmctx);
mm_switch_context(mmctx);
proc_t *proc = proc_create();
__assert(proc);
@@ -440,7 +440,7 @@ void proc_run_init() {
__assert(stack);
// reenter kernel context
vmm_switchcontext(&vmm_kernelctx);
mm_switch_context(&mm_kernel_ctx);
thread_t *uthread = sched_newthread(entry, PAGE_SIZE * 16, 1, proc, stack);
__assert(uthread);
@@ -448,7 +448,7 @@ void proc_run_init() {
proc->threadlist = uthread;
uthread->procnext = NULL;
uthread->vmmctx = vmmctx;
uthread->mmctx = mmctx;
sched_queue(uthread);
VOP_RELEASE(initnode);
+5 -5
View File
@@ -2,7 +2,7 @@
#include <logging.h>
#include <arch/cpu.h>
#include <spinlock.h>
#include <kernel/vmm.h>
#include <kernel/mm.h>
#include <kernel/alloc.h>
#include <errno.h>
#include <kernel/elf.h>
@@ -25,8 +25,8 @@ static __attribute__((noreturn)) void switch_thread(thread_t *thread) {
current_cpu()->thread = thread;
if(current == NULL || thread->vmmctx != current->vmmctx)
vmm_switchcontext(thread->vmmctx);
if(current == NULL || thread->mmctx != current->mmctx)
mm_switch_context(thread->mmctx);
current_cpu()->intstatus = ARCH_CONTEXT_INTSTATUS(&thread->context);
thread->cpu = current_cpu();
@@ -350,7 +350,7 @@ void sched_ap_entry() {
dpc_prepare(&current_cpu()->reschedule_dpc, sched_reschedule_dpc);
set_up_bitmaps();
current_cpu()->schedulerstack = vmm_map(NULL, SCHEDULER_STACK_SIZE, VMM_FLAGS_ALLOCATE, ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE | ARCH_MMU_FLAGS_NOEXEC, NULL);
current_cpu()->schedulerstack = mm_map(NULL, SCHEDULER_STACK_SIZE, MM_RANGE_FLAGS_ALLOCATE, ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE | ARCH_MMU_FLAGS_NOEXEC, NULL);
__assert(current_cpu()->schedulerstack);
current_cpu()->schedulerstack = (void *)((uintptr_t)current_cpu()->schedulerstack + SCHEDULER_STACK_SIZE);
@@ -381,7 +381,7 @@ void sched_init() {
__assert(bitmap_init(&sched_idle_cpu_bitmap, arch_smp_get_cpu_count()) == 0);
current_cpu()->schedulerstack = vmm_map(NULL, SCHEDULER_STACK_SIZE, VMM_FLAGS_ALLOCATE, ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE | ARCH_MMU_FLAGS_NOEXEC, NULL);
current_cpu()->schedulerstack = mm_map(NULL, SCHEDULER_STACK_SIZE, MM_RANGE_FLAGS_ALLOCATE, ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE | ARCH_MMU_FLAGS_NOEXEC, NULL);
__assert(current_cpu()->schedulerstack);
current_cpu()->schedulerstack = (void *)((uintptr_t)current_cpu()->schedulerstack + SCHEDULER_STACK_SIZE);
+1 -1
View File
@@ -2,7 +2,7 @@
#include <kernel/abi.h>
#include <time.h>
#include <kernel/timekeeper.h>
#include <kernel/vmm.h>
#include <kernel/mm.h>
syscallret_t syscall_clockget(context_t *, int clockid, timespec_t *tp) {
syscallret_t ret = {
+10 -10
View File
@@ -2,7 +2,7 @@
#include <kernel/alloc.h>
#include <string.h>
#include <errno.h>
#include <kernel/vmm.h>
#include <kernel/mm.h>
#include <arch/cpu.h>
#include <kernel/elf.h>
#include <kernel/scheduler.h>
@@ -67,8 +67,8 @@ static syscallret_t execve(context_t *context, char *upath, char *uargv[], char
size_t envsize = 0;
char **argv = NULL;
char **envp = NULL;
vmmcontext_t *vmmctx = NULL;
vmmcontext_t *oldctx = current_vmm_context();
mm_context_t *mmctx = NULL;
mm_context_t *oldctx = current_mm_context();
vnode_t *node = NULL;
vnode_t *refnode = NULL;
char *interp = NULL;
@@ -237,13 +237,13 @@ static syscallret_t execve(context_t *context, char *upath, char *uargv[], char
}
}
vmmctx = vmm_newcontext();
if (vmmctx == NULL) {
mmctx = mm_create_context();
if (mmctx == NULL) {
ret.errno = ENOMEM;
goto error;
}
vmm_switchcontext(vmmctx);
mm_switch_context(mmctx);
auxv64list_t auxv64;
void *entry;
@@ -321,7 +321,7 @@ static syscallret_t execve(context_t *context, char *upath, char *uargv[], char
proc->signals.actions[i].address = SIG_IGN;
}
vmm_destroycontext(oldctx);
mm_destroy_context(oldctx);
CTX_SP(context) = (uint64_t)stack;
CTX_IP(context) = (uint64_t)entry;
@@ -339,9 +339,9 @@ static syscallret_t execve(context_t *context, char *upath, char *uargv[], char
if (envp)
freevec(envp);
if (vmmctx && ret.errno) {
vmm_switchcontext(oldctx);
vmm_destroycontext(vmmctx);
if (mmctx && ret.errno) {
mm_switch_context(oldctx);
mm_destroy_context(mmctx);
}
if (refnode)
+2 -2
View File
@@ -27,9 +27,9 @@ syscallret_t syscall_fork(context_t *ctx) {
goto cleanup;
}
nthread->vmmctx = vmm_fork(current_thread()->vmmctx);
nthread->mmctx = mm_fork_context(current_thread()->mmctx);
if (nthread->vmmctx == NULL) {
if (nthread->mmctx == NULL) {
ret.errno = ENOMEM;
goto cleanup;
}
+2 -2
View File
@@ -1,6 +1,6 @@
#include <kernel/syscalls.h>
#include <kernel/slab.h>
#include <kernel/vmm.h>
#include <kernel/mm.h>
#include <time.h>
#include <hashtable.h>
#include <kernel/poll.h>
@@ -66,7 +66,7 @@ syscallret_t syscall_futex(context_t *, uint32_t *futexp, int op, uint32_t value
if (unlikely(ret.errno))
goto cleanup;
uint32_t *physical = vmm_getphysical(futexp, 0);
uint32_t *physical = mm_get_physical_address(futexp, 0);
futex_t *futex = getfutex(physical);
switch (op) {
+1 -1
View File
@@ -1,6 +1,6 @@
#include <kernel/syscalls.h>
#include <kernel/file.h>
#include <kernel/vmm.h>
#include <kernel/mm.h>
#include <errno.h>
#include <kernel/alloc.h>
+9 -9
View File
@@ -1,7 +1,7 @@
#include <kernel/syscalls.h>
#include <kernel/abi.h>
#include <errno.h>
#include <kernel/vmm.h>
#include <kernel/mm.h>
#include <logging.h>
#define PROT_READ 0x01
@@ -59,21 +59,21 @@ syscallret_t syscall_mmap(context_t *context, void *hint, size_t len, int prot,
mmuflags |= ARCH_MMU_FLAGS_NOEXEC;
bool isfile = (flags & MAP_ANONYMOUS) == 0;
int vmmflags = 0;
int mm_flags = 0;
if (flags & MAP_FIXED)
vmmflags |= VMM_FLAGS_REPLACE;
mm_flags |= MM_RANGE_FLAGS_REPLACE;
if (flags & MAP_FIXED_NOREPLACE)
vmmflags |= VMM_FLAGS_EXACT;
mm_flags |= MM_RANGE_FLAGS_EXACT;
if ((flags & MAP_ANONYMOUS) == 0)
vmmflags |= VMM_FLAGS_FILE;
mm_flags |= MM_RANGE_FLAGS_FILE;
if (flags & MAP_SHARED)
vmmflags |= VMM_FLAGS_SHARED;
mm_flags |= MM_RANGE_FLAGS_SHARED;
vmmfiledesc_t vfd;
mm_map_file_desc_t vfd;
file_t *file = NULL;
if (isfile) {
// make sure offset is page aligned
@@ -99,7 +99,7 @@ syscallret_t syscall_mmap(context_t *context, void *hint, size_t len, int prot,
}
// if the vnode is not cacheable, we need to make sure we can map it
// TODO move this check to vmm_map once the return value of mmap is fixed to return an errno
// TODO move this check to mm_map once the return value of mmap is fixed to return an errno
if (vfs_iscacheable(file->vnode) == false) {
ret.errno = VOP_MMAP(file->vnode, VOP_MMAP_ADDRESS_MMAP_SUPPORTED, 0, 0, NULL);
if (ret.errno)
@@ -113,7 +113,7 @@ syscallret_t syscall_mmap(context_t *context, void *hint, size_t len, int prot,
if (hint < USERSPACE_START)
hint = USERSPACE_MMAP_START;
ret.ret = (uint64_t)vmm_map(hint, len, vmmflags, mmuflags, &vfd);
ret.ret = (uint64_t)mm_map(hint, len, mm_flags, mmuflags, &vfd);
if (ret.ret == 0)
ret.errno = ENOMEM;
+1 -1
View File
@@ -1,5 +1,5 @@
#include <kernel/syscalls.h>
#include <kernel/vmm.h>
#include <kernel/mm.h>
#include <kernel/alloc.h>
#include <kernel/vfs.h>
#include <logging.h>
+2 -2
View File
@@ -1,7 +1,7 @@
#include <kernel/syscalls.h>
#include <kernel/abi.h>
#include <errno.h>
#include <kernel/vmm.h>
#include <kernel/mm.h>
#include <logging.h>
#define PROT_READ 0x01
@@ -37,7 +37,7 @@ syscallret_t syscall_mprotect(context_t *context, void *address, size_t len, int
if ((prot & PROT_EXEC) == 0)
mmuflags |= ARCH_MMU_FLAGS_NOEXEC;
ret.errno = vmm_changemmuflags(address, len, mmuflags, VMM_FLAGS_CREDCHECK);
ret.errno = mm_change_mmu_flags(address, len, mmuflags, MM_RANGE_FLAGS_CREDCHECK);
ret.ret = ret.errno ? -1 : 0;
return ret;
+2 -2
View File
@@ -1,5 +1,5 @@
#include <kernel/syscalls.h>
#include <kernel/vmm.h>
#include <kernel/mm.h>
#include <errno.h>
syscallret_t syscall_munmap(context_t *ctx, void *addr, size_t length) {
@@ -18,7 +18,7 @@ syscallret_t syscall_munmap(context_t *ctx, void *addr, size_t length) {
return ret;
}
vmm_unmap(addr, length, 0);
mm_unmap(addr, length, 0);
ret.ret = 0;
ret.errno = 0;
+1 -1
View File
@@ -26,7 +26,7 @@ syscallret_t syscall_newthread(context_t *, void *entry, void *stack) {
return ret;
}
thread->vmmctx = current_thread()->vmmctx;
thread->mmctx = current_thread()->mmctx;
bool intstatus = interrupt_set(false);
spinlock_acquire(&proc->threadlistlock);
+1 -1
View File
@@ -1,7 +1,7 @@
#include <kernel/syscalls.h>
#include <kernel/file.h>
#include <kernel/poll.h>
#include <kernel/vmm.h>
#include <kernel/mm.h>
#include <logging.h>
#include <kernel/alloc.h>
+1 -1
View File
@@ -1,6 +1,6 @@
#include <kernel/syscalls.h>
#include <time.h>
#include <kernel/vmm.h>
#include <kernel/mm.h>
#include <kernel/timer.h>
#include <arch/cpu.h>
+8 -8
View File
@@ -23,7 +23,7 @@ thread_t *sched_newthread(void *ip, size_t kstacksize, int nice, proc_t *proc, v
return NULL;
}
thread->kernelstack = vmm_map(NULL, kstacksize, VMM_FLAGS_ALLOCATE, ARCH_MMU_FLAGS_WRITE | ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_NOEXEC, NULL);
thread->kernelstack = mm_map(NULL, kstacksize, MM_RANGE_FLAGS_ALLOCATE, ARCH_MMU_FLAGS_WRITE | ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_NOEXEC, NULL);
if (thread->kernelstack == NULL) {
arch_extracontext_free(&thread->extracontext);
slab_free(thread_cache, thread);
@@ -32,8 +32,8 @@ thread_t *sched_newthread(void *ip, size_t kstacksize, int nice, proc_t *proc, v
thread->kernelstacktop = (void *)((uintptr_t)thread->kernelstack + kstacksize);
// non kernel thread vmm contexts are handled by the caller
thread->vmmctx = proc ? NULL : &vmm_kernelctx;
// non kernel thread mm contexts are handled by the caller
thread->mmctx = proc ? NULL : &mm_kernel_ctx;
thread->proc = proc;
thread->kernelstacksize = kstacksize;
thread->nice = nice;
@@ -57,7 +57,7 @@ thread_t *sched_newthread(void *ip, size_t kstacksize, int nice, proc_t *proc, v
}
void sched_destroythread(thread_t *thread) {
vmm_unmap(thread->kernelstack, thread->kernelstacksize, 0);
mm_unmap(thread->kernelstack, thread->kernelstacksize, 0);
arch_extracontext_free(&thread->extracontext);
slab_free(thread_cache, thread);
}
@@ -84,18 +84,18 @@ __attribute__((noreturn)) void sched_threadexit() {
thread_t *thread = current_thread();
proc_t *proc = thread->proc;
vmmcontext_t *oldctx = thread->vmmctx;
vmm_switchcontext(&vmm_kernelctx);
mm_context_t *oldctx = thread->mmctx;
mm_switch_context(&mm_kernel_ctx);
if (proc) {
__atomic_fetch_sub(&proc->runningthreadcount, 1, __ATOMIC_SEQ_CST);
__assert(oldctx != &vmm_kernelctx);
__assert(oldctx != &mm_kernel_ctx);
if (proc->runningthreadcount == 0) {
if (thread->shouldexit)
proc->status = -1;
proc_exit();
vmm_destroycontext(oldctx);
mm_destroy_context(oldctx);
PROC_RELEASE(proc);
}
}