aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv/kernel/vmem.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2021-12-20 21:03:37 +0200
committerKimplul <kimi.h.kuparinen@gmail.com>2021-12-20 21:03:37 +0200
commit61291639524e4aebf93a3315661e7180ac1b9c1e (patch)
treeb524cd94fe1c59c9733e913f1de1e1c68b313bda /arch/riscv/kernel/vmem.c
parent6f8e5772d17d277842be3f6162ddd665a17e5be9 (diff)
downloadkmi-61291639524e4aebf93a3315661e7180ac1b9c1e.tar.gz
kmi-61291639524e4aebf93a3315661e7180ac1b9c1e.zip
Right up to init_proc, FUCK YEAH
+ Lots to do still, should keep a more detailed TODO.txt, among other things implement Sv48 support, make more things single truths etc.
Diffstat (limited to 'arch/riscv/kernel/vmem.c')
-rw-r--r--arch/riscv/kernel/vmem.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/riscv/kernel/vmem.c b/arch/riscv/kernel/vmem.c
index 4cb84a6..744f633 100644
--- a/arch/riscv/kernel/vmem.c
+++ b/arch/riscv/kernel/vmem.c
@@ -4,11 +4,12 @@
#include <apos/mem.h>
#include <apos/debug.h>
#include <pages.h>
+#include <vmem.h>
#define pte_ppn(pte) (((pm_t)(pte)) >> 10)
#define pte_flags(pte) (((pm_t)(pte)) & 0xff)
-#define to_pte(p, f) ((pm_to_pnum(p) << 10) + (f))
-#define pte_addr(pte) (pnum_to_paddr(pte_ppn(pte)))
+#define to_pte(p, f) ((pm_to_pnum((pm_t)__pa(p)) << 10) | (f))
+#define pte_addr(pte) __va(pnum_to_paddr(pte_ppn(pte)))
#define vm_to_index(a, o) (pm_to_index(a, o))
void mod_vmem(struct vm_branch_t *branch, vm_t vaddr, uint8_t flags, enum mm_order_t order)
@@ -51,7 +52,7 @@ void unmap_vmem(struct vm_branch_t *branch, vm_t vaddr, enum mm_order_t order)
size_t idx = pm_to_index(vaddr, order);
if (branch->leaf[idx])
- free_page(order, pte_addr(branch->leaf[idx]));
+ free_page(order, (pm_t)pte_addr(branch->leaf[idx]));
branch->leaf[idx] = 0;
}