From 92a518927d57758128bb7d54bc870a2c36931df4 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sat, 8 Jul 2023 14:40:04 -0300 Subject: [PATCH] vmm: pass cred struct to VOP_MAP and VOP_UNMAP --- kernel-src/arch/x86-64/e9.c | 2 -- kernel-src/mm/alloc.c | 1 - kernel-src/mm/vmm.c | 11 +++++++++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/kernel-src/arch/x86-64/e9.c b/kernel-src/arch/x86-64/e9.c index 8c633eab..06b69548 100644 --- a/kernel-src/arch/x86-64/e9.c +++ b/kernel-src/arch/x86-64/e9.c @@ -1,7 +1,5 @@ #include -// TODO compile time options for disabling output to port e9h - void arch_e9_putc(char c) { #ifdef X86_64_ENABLE_E9 outb(0xe9, c); diff --git a/kernel-src/mm/alloc.c b/kernel-src/mm/alloc.c index de301be8..97620432 100644 --- a/kernel-src/mm/alloc.c +++ b/kernel-src/mm/alloc.c @@ -20,7 +20,6 @@ static void initarea(scache_t *cache, void *obj) { } static scache_t *getcachefromsize(size_t size) { - // XXX find a faster way to check this scache_t *cache = NULL; for (int i = 0; i < CACHE_COUNT; ++i) { if (size <= allocsizes[i]) { diff --git a/kernel-src/mm/vmm.c b/kernel-src/mm/vmm.c index 0ddecf35..ef402c29 100644 --- a/kernel-src/mm/vmm.c +++ b/kernel-src/mm/vmm.c @@ -215,8 +215,12 @@ static void destroyrange(vmmcontext_t *context, vmmrange_t *range, uintmax_t _of if (physical == NULL) continue; + thread_t *thread = _cpu()->thread; + proc_t *proc = thread ? thread->proc : NULL; + cred_t *cred = proc ? &proc->cred : NULL; + if ((range->flags & VMM_FLAGS_FILE) && (range->flags & VMM_FLAGS_SHARED) && (flags & VMM_DESTROY_FLAGS_NOSYNC) == 0) { - __assert(VOP_MUNMAP(range->vnode, vaddr, range->offset + offset, mmuflagstovnodeflags(range->mmuflags), NULL) == 0); // XXX pass cred struct + __assert(VOP_MUNMAP(range->vnode, vaddr, range->offset + offset, mmuflagstovnodeflags(range->mmuflags), cred) == 0); } else { pmm_free(physical, 1); arch_mmu_unmap(context->pagetable, vaddr); @@ -320,10 +324,13 @@ bool vmm_pagefault(void *addr, bool user, int actions) { goto cleanup; // TODO CoW + thread_t *thread = _cpu()->thread; + proc_t *proc = thread ? thread->proc : NULL; + cred_t *cred = proc ? &proc->cred : NULL; if (range->flags & VMM_FLAGS_FILE) { uintmax_t mapoffset = (uintptr_t)addr - (uintptr_t)range->start; - __assert(VOP_MMAP(range->vnode, addr, range->offset + mapoffset, mmuflagstovnodeflags(range->mmuflags), NULL) == 0); // XXX pass cred struct + __assert(VOP_MMAP(range->vnode, addr, range->offset + mapoffset, mmuflagstovnodeflags(range->mmuflags), cred) == 0); status = true; } else { void *paddr = pmm_alloc(1, PMM_SECTION_DEFAULT);