This commit is contained in:
2026-08-13 17:22:36 +02:00
committed by Marvin Friedrich
parent 5ee30664c5
commit 40cea4dedd
48 changed files with 622 additions and 211 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ kernel_sources += files(
'pmm.c',
'slab.c',
'usercopy.c',
'vas.c',
'virt.c',
'vma.c',
'vmo.c',
)
+6 -6
View File
@@ -5,7 +5,7 @@
#include <assert.h>
// Try to create a new, empty virtual address space.
zn_status_t vma_new(struct vas** out) {
zn_status_t vas_new(struct vas** out) {
debug_assert(out != nullptr, "Missing out");
zn_status_t res;
@@ -30,23 +30,23 @@ err0:
}
// Delete a virtual address space.
void vma_delete(struct vas* vm) {}
void vas_delete(struct vas* vm) {}
// Remove any mappings in the given address range.
// May fail if there is no memory and a mapping needs to be split.
zn_status_t vma_unmap(struct vas* vm, uintptr_t vaddr, size_t size);
zn_status_t vas_unmap(struct vas* vm, uintptr_t vaddr, size_t size);
// Change the protection of an existing mapping.
// May fail if there is no memory and a mapping needs to be split.
zn_status_t vma_protect(struct vas* vm, uintptr_t vaddr, size_t size, enum zn_vm_flags flags);
zn_status_t vas_protect(struct vas* vm, uintptr_t vaddr, size_t size, enum zn_vm_flags flags);
// Try to handle a page fault.
bool vma_page_fault(struct vas* vm, uintptr_t vaddr, enum zn_vm_flags access_type) {
bool vas_page_fault(struct vas* vm, uintptr_t vaddr, enum zn_vm_flags access_type) {
// TODO
return false;
}
zn_status_t vma_map_vmo(
zn_status_t vas_map_vmo(
struct vas* vas,
struct vmo* vmo,
uintptr_t addr,
+2 -2
View File
@@ -101,7 +101,7 @@ zn_status_t vmo_copy(
}
static zn_status_t paged_get_page(struct vmo* vmo, uintptr_t offset_idx, struct page** out) {
struct paged_vmo* paged = CONTAINER_OF(vmo, struct paged_vmo, object);
struct paged_vmo* paged = containerof(vmo, struct paged_vmo, object);
// Try to find the requested page in the cache.
struct page_list* iter;
@@ -177,7 +177,7 @@ struct phys_range_vmo {
};
static zn_status_t phys_range_get_page(struct vmo* vmo, uintptr_t offset_idx, struct page** out) {
struct phys_range_vmo* p = CONTAINER_OF(vmo, struct phys_range_vmo, object);
struct phys_range_vmo* p = containerof(vmo, struct phys_range_vmo, object);
*out = &vm_pfndb[(p->start / arch_mem_page_size()) + offset_idx];
return ZN_OK;
}