diff options
author | Andrew Waterman <waterman@cs.berkeley.edu> | 2013-12-14 01:59:48 -0800 |
---|---|---|
committer | Andrew Waterman <waterman@cs.berkeley.edu> | 2013-12-14 01:59:48 -0800 |
commit | 89a0cefd28cb7bdd33e0d17d43cfad5ae6d7e19f (patch) | |
tree | e73634ddd358d588b3c0a133207a89b7f9c53da0 /pk/vm.c | |
parent | a502c24732b1eb9f13c9addde81f2be536092fe1 (diff) | |
download | pk-89a0cefd28cb7bdd33e0d17d43cfad5ae6d7e19f.zip pk-89a0cefd28cb7bdd33e0d17d43cfad5ae6d7e19f.tar.gz pk-89a0cefd28cb7bdd33e0d17d43cfad5ae6d7e19f.tar.bz2 |
Add -p flag: force physical memory addressing
Diffstat (limited to 'pk/vm.c')
-rw-r--r-- | pk/vm.c | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -23,7 +23,6 @@ static pte_t* root_page_table; static uintptr_t first_free_page; static size_t next_free_page; static size_t free_pages; -static int have_vm; static uintptr_t __page_alloc() { @@ -408,9 +407,12 @@ void vm_init() __map_kernel_range(0, current.user_min, PROT_READ|PROT_WRITE|PROT_EXEC); - write_csr(ptbr, root_page_table_paddr); - set_csr(status, SR_VM); - have_vm = clear_csr(status, SR_VM) & SR_VM; + if (have_vm) + { + write_csr(ptbr, root_page_table_paddr); + set_csr(status, SR_VM); + have_vm = clear_csr(status, SR_VM) & SR_VM; + } size_t stack_size = RISCV_PGSIZE * stack_pages; current.stack_top = MIN(first_free_page, 0x80000000); // for RV32 sanity |