diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-04-10 15:39:41 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2022-04-10 15:42:04 +0300 |
| commit | 8aa17b12f29536ea9c8b6ca22c7f153e8d90fa3b (patch) | |
| tree | e7dba9b6b9cdcd1d04cba639c8f76e9685ac549f /arch/riscv64/kernel/vmem.c | |
| parent | 4760462d9b3bf2aba8664c57be85f4adbfa164a2 (diff) | |
| download | kmi-8aa17b12f29536ea9c8b6ca22c7f153e8d90fa3b.tar.gz kmi-8aa17b12f29536ea9c8b6ca22c7f153e8d90fa3b.zip | |
add clang format and run it
Diffstat (limited to 'arch/riscv64/kernel/vmem.c')
| -rw-r--r-- | arch/riscv64/kernel/vmem.c | 83 |
1 files changed, 45 insertions, 38 deletions
diff --git a/arch/riscv64/kernel/vmem.c b/arch/riscv64/kernel/vmem.c index cd822ae..46ddf29 100644 --- a/arch/riscv64/kernel/vmem.c +++ b/arch/riscv64/kernel/vmem.c @@ -7,30 +7,30 @@ #include <pages.h> #include <csr.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) __va(pnum_to_paddr(pte_ppn(pte))) -#define pte_paddr(pte) (pnum_to_paddr(pte_ppn(pte))) +#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) __va(pnum_to_paddr(pte_ppn(pte))) +#define pte_paddr(pte) (pnum_to_paddr(pte_ppn(pte))) #define vm_to_index(a, o) (pm_to_index(a, o)) -#define is_active(pte) (pte_flags(pte) & VM_V) -#define is_leaf(pte) (is_active(pte) && (pte_flags(pte) & ~VM_V)) -#define is_branch(pte) (is_active(pte) && !(pte_flags(pte) & ~VM_V)) +#define is_active(pte) (pte_flags(pte) & VM_V) +#define is_leaf(pte) (is_active(pte) && (pte_flags(pte) & ~VM_V)) +#define is_branch(pte) (is_active(pte) && !(pte_flags(pte) & ~VM_V)) static pm_t *__find_vmem(struct vm_branch *b, vm_t v, enum mm_order *o) { enum mm_order top = __mm_max_order; - if(o) + if (o) *o = MM_O0; do { size_t idx = vm_to_index(v, top); pm_t pte = (pm_t)b->leaf[idx]; - if(!pte) + if (!pte) return 0; - if(is_leaf(pte)){ - if(o) + if (is_leaf(pte)) { + if (o) *o = top; return (pm_t *)&b->leaf[idx]; @@ -42,10 +42,11 @@ static pm_t *__find_vmem(struct vm_branch *b, vm_t v, enum mm_order *o) return 0; } -stat_t mod_vpage(struct vm_branch *branch, vm_t vaddr, pm_t paddr, vmflags_t flags) +stat_t mod_vpage(struct vm_branch *branch, vm_t vaddr, pm_t paddr, + vmflags_t flags) { pm_t *pte = __find_vmem(branch, vaddr, 0); - if(pte){ + if (pte) { *pte = to_pte((pm_t)__pa(paddr), vp_flags(flags)); return OK; } @@ -56,14 +57,14 @@ stat_t mod_vpage(struct vm_branch *branch, vm_t vaddr, pm_t paddr, vmflags_t fla /* huh, should probably add status flags etc. to all my API functions. Damn, I'm * lazy. */ stat_t stat_vpage(struct vm_branch *branch, vm_t vaddr, pm_t *paddr, - enum mm_order *order, vmflags_t *flags) + enum mm_order *order, vmflags_t *flags) { pm_t *pte = __find_vmem(branch, vaddr, order); - if(pte){ - if(paddr) + if (pte) { + if (paddr) *paddr = (pm_t)pte_addr(*pte); - if(flags) + if (flags) *flags = pte_flags(*pte); return OK; @@ -81,19 +82,20 @@ static struct vm_branch *__create_leaf() static void __destroy_branch(struct vm_branch *b) { - if(!b) + if (!b) return; - for(size_t i = 0; i < BASE_PAGE_SIZE / sizeof(pm_t); ++i){ - if(is_branch(b->leaf[i])) - __destroy_branch((struct vm_branch *)pte_addr(b->leaf[i])); + for (size_t i = 0; i < BASE_PAGE_SIZE / sizeof(pm_t); ++i) { + if (is_branch(b->leaf[i])) + __destroy_branch( + (struct vm_branch *)pte_addr(b->leaf[i])); free_page(MM_KPAGE, (pm_t)pte_addr(b->leaf[i])); } } -stat_t map_vpage(struct vm_branch *branch, - pm_t paddr, vm_t vaddr, vmflags_t flags, enum mm_order order) +stat_t map_vpage(struct vm_branch *branch, pm_t paddr, vm_t vaddr, + vmflags_t flags, enum mm_order order) { enum mm_order top = __mm_max_order; while (top != order) { @@ -102,24 +104,24 @@ stat_t map_vpage(struct vm_branch *branch, if (!branch->leaf[idx]) branch->leaf[idx] = __create_leaf(); - branch = (struct vm_branch *)pte_addr(branch->leaf[idx]); top--; } size_t idx = vm_to_index(vaddr, top); - if (is_branch(branch->leaf[idx])) /* something has gone terribly wrong? */ + 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), vp_flags(flags)); + branch->leaf[idx] = + (struct vm_branch *)to_pte((pm_t)__pa(paddr), vp_flags(flags)); return OK; } stat_t unmap_vpage(struct vm_branch *branch, vm_t vaddr) { - pm_t *pte = __find_vmem(branch, vaddr, 0); - if(pte){ + if (pte) { *pte = 0; return OK; } @@ -129,24 +131,27 @@ stat_t unmap_vpage(struct vm_branch *branch, vm_t vaddr) void flush_tlb() { - __asm__ volatile ("sfence.vma %0\n" :: "r" (cpu_id()) : "memory"); + __asm__ volatile("sfence.vma %0\n" ::"r"(cpu_id()) : "memory"); } void flush_tlb_all() { - __asm__ volatile ("sfence.vma\n" ::: "memory"); + __asm__ volatile("sfence.vma\n" ::: "memory"); } static void __start_vmem(struct vm_branch *branch, enum mm_mode m) { branch = (struct vm_branch *)__pa(branch); - if(m == Sv32) - csr_write(CSR_SATP, SATP_MODE_Sv32 | pm_to_pnum((pm_t)(branch))); + if (m == Sv32) + csr_write(CSR_SATP, + SATP_MODE_Sv32 | pm_to_pnum((pm_t)(branch))); else if (m == Sv39) - csr_write(CSR_SATP, SATP_MODE_Sv39 | pm_to_pnum((pm_t)(branch))); + csr_write(CSR_SATP, + SATP_MODE_Sv39 | pm_to_pnum((pm_t)(branch))); else - csr_write(CSR_SATP, SATP_MODE_Sv48 | pm_to_pnum((pm_t)(branch))); + csr_write(CSR_SATP, + SATP_MODE_Sv48 | pm_to_pnum((pm_t)(branch))); flush_tlb_all(); /* Sv57 && Sv64 in the future? */ @@ -167,8 +172,9 @@ struct vm_branch *init_vmem(void *fdt) void populate_root_branch(struct vm_branch *b) { size_t flags = VM_V | VM_R | VM_W | VM_X | VM_G; - for(size_t i = KSTART_PAGE; i < IO_PAGE; ++i) - b->leaf[i] = (struct vm_branch *)to_pte(RAM_BASE + SZ_1G * (i - KSTART_PAGE), flags); + for (size_t i = KSTART_PAGE; i < IO_PAGE; ++i) + b->leaf[i] = (struct vm_branch *)to_pte( + RAM_BASE + SZ_1G * (i - KSTART_PAGE), flags); /* map kernel IO to zero for now, this will be overridden later * (if at all) */ @@ -180,7 +186,8 @@ vm_t setup_kernel_io(struct vm_branch *b, vm_t paddr) { /* assume Sv39 for now */ pm_t gigapage = paddr / MM_GPAGE_SIZE; - b->leaf[IO_PAGE] = (struct vm_branch *)to_pte(gigapage, VM_V | VM_R | VM_W); + b->leaf[IO_PAGE] = + (struct vm_branch *)to_pte(gigapage, VM_V | VM_R | VM_W); return -SZ_1G + paddr - (gigapage * MM_GPAGE_SIZE); } #endif |
