diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-03-01 21:24:21 +0200 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-03-01 21:24:21 +0200 |
| commit | cbfca7a9854061e3a2d59795361fb875827e7c50 (patch) | |
| tree | 5cc7ba8e21e5194afa5e81054d825f91315b10e0 | |
| parent | 2f7742acbeace74f09c8d7bb04cf127a84778712 (diff) | |
| download | kmi-cbfca7a9854061e3a2d59795361fb875827e7c50.tar.gz kmi-cbfca7a9854061e3a2d59795361fb875827e7c50.zip | |
make vmflags_t 16 bits
lower 8 bits are reserved for arch-specific flags (but at least
read/write/execute) and higher 8 bits are metadata, currently only for
VM_VIRTUAL (to be used when the backing physical memory shouldn't be
freed)
| -rw-r--r-- | TODO.txt | 3 | ||||
| -rw-r--r-- | arch/riscv64/kernel/vmem.c | 4 | ||||
| -rw-r--r-- | include/apos/types.h | 2 | ||||
| -rw-r--r-- | include/apos/vmem.h | 3 |
4 files changed, 9 insertions, 3 deletions
@@ -49,3 +49,6 @@ be better for cache locality. + Add in more logging etc. dumbass + More functions, less macros? sometimes helpful in gdb, maybe also for kernel binary size? ++ Add in purely virtual memory pages, i.e. stuff that shouldn't free physical +memory when the memory page is freed, for example if two processes share the +same memory diff --git a/arch/riscv64/kernel/vmem.c b/arch/riscv64/kernel/vmem.c index 9fd42dd..cd822ae 100644 --- a/arch/riscv64/kernel/vmem.c +++ b/arch/riscv64/kernel/vmem.c @@ -46,7 +46,7 @@ stat_t mod_vpage(struct vm_branch *branch, vm_t vaddr, pm_t paddr, vmflags_t fla { pm_t *pte = __find_vmem(branch, vaddr, 0); if(pte){ - *pte = to_pte((pm_t)__pa(paddr), flags); + *pte = to_pte((pm_t)__pa(paddr), vp_flags(flags)); return OK; } @@ -111,7 +111,7 @@ stat_t map_vpage(struct vm_branch *branch, if (is_branch(branch->leaf[idx])) /* something has gone terribly wrong? */ __destroy_branch(branch->leaf[idx]); - branch->leaf[idx] = (struct vm_branch *)to_pte((pm_t)__pa(paddr), flags); + branch->leaf[idx] = (struct vm_branch *)to_pte((pm_t)__pa(paddr), vp_flags(flags)); return OK; } diff --git a/include/apos/types.h b/include/apos/types.h index 9b90611..fea71ae 100644 --- a/include/apos/types.h +++ b/include/apos/types.h @@ -178,7 +178,7 @@ typedef intmax_t ssize_t; /* some common types used throughout the kernel */ typedef int_fast8_t stat_t; typedef uint_fast32_t id_t; -typedef uint_fast8_t vmflags_t; +typedef uint_fast16_t vmflags_t; /* error types (should this go somewhere else? */ /* negative error codes are reserved for general usage, positive error codes are diff --git a/include/apos/vmem.h b/include/apos/vmem.h index 92e9d61..cbdef2e 100644 --- a/include/apos/vmem.h +++ b/include/apos/vmem.h @@ -21,4 +21,7 @@ stat_t free_uvmem_wrapper(struct vm_branch *b, pm_t *offset, vm_t vaddr, vmflags #define unmap_freed_region(b, start, bytes)\ map_fill_region(b, &free_uvmem_wrapper, 0, start, bytes, 0) +#define vm_flags(x) ((x) & ~0xff) +#define vp_flags(x) ((x) & 0xff) + #endif /* APOS_VMEM_H */ |
