vmm: VMM_FLAGS_REPLACE

This commit is contained in:
Matheus
2024-08-10 22:41:29 -03:00
parent 1a955c7656
commit d310764085
2 changed files with 19 additions and 9 deletions
+18 -7
View File
@@ -482,10 +482,22 @@ void *vmm_map(void *addr, volatile size_t size, int flags, mmuflags_t mmuflags,
if (range == NULL)
goto cleanup;
range->start = start;
range->size = size;
range->flags = VMM_PERMANENT_FLAGS_MASK & flags;
range->mmuflags = mmuflags;
if (flags & VMM_FLAGS_REPLACE) {
__assert(addr);
retaddr = addr;
range->start = addr;
range->size = size;
range->flags = VMM_PERMANENT_FLAGS_MASK & flags;
range->mmuflags = mmuflags;
__assert((flags & (VMM_FLAGS_ALLOCATE | VMM_FLAGS_PHYSICAL)) == 0);
unmap(space, addr, size);
} else {
retaddr = start;
range->start = start;
range->size = size;
range->flags = VMM_PERMANENT_FLAGS_MASK & flags;
range->mmuflags = mmuflags;
}
if (flags & VMM_FLAGS_FILE) {
// XXX make sure that writes can't happen to executable memory mapped files and check file permissions
@@ -503,6 +515,7 @@ void *vmm_map(void *addr, volatile size_t size, int flags, mmuflags_t mmuflags,
for (uintmax_t j = 0; j < size; j += PAGE_SIZE)
arch_mmu_unmap(_cpu()->vmmctx->pagetable, (void *)((uintptr_t)start + j));
retaddr = NULL;
goto cleanup;
}
}
@@ -526,6 +539,7 @@ void *vmm_map(void *addr, volatile size_t size, int flags, mmuflags_t mmuflags,
}
}
retaddr = NULL;
goto cleanup;
}
memset(MAKE_HHDM(allocated), 0, PAGE_SIZE);
@@ -533,9 +547,6 @@ void *vmm_map(void *addr, volatile size_t size, int flags, mmuflags_t mmuflags,
}
insertrange(space, range);
retaddr = start;
cleanup:
if (start == NULL && range)
freerange(range);
+1 -2
View File
@@ -44,9 +44,8 @@ syscallret_t syscall_mmap(context_t *context, void *hint, size_t len, int prot,
bool isfile = (flags & MAP_ANONYMOUS) == 0;
int vmmflags = 0;
// XXX this isn't the correct behaviour for MAP_FIXED
if (flags & MAP_FIXED)
vmmflags |= VMM_FLAGS_EXACT;
vmmflags |= VMM_FLAGS_REPLACE;
if ((flags & MAP_ANONYMOUS) == 0)
vmmflags |= VMM_FLAGS_FILE;