diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2021-12-20 21:03:37 +0200 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2021-12-20 21:03:37 +0200 |
| commit | 61291639524e4aebf93a3315661e7180ac1b9c1e (patch) | |
| tree | b524cd94fe1c59c9733e913f1de1e1c68b313bda /arch/riscv/kernel/vmem.c | |
| parent | 6f8e5772d17d277842be3f6162ddd665a17e5be9 (diff) | |
| download | kmi-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.c | 7 |
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; } |
