aboutsummaryrefslogtreecommitdiff
path: root/pk/vm.c
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2013-12-14 01:59:48 -0800
committerAndrew Waterman <waterman@cs.berkeley.edu>2013-12-14 01:59:48 -0800
commit89a0cefd28cb7bdd33e0d17d43cfad5ae6d7e19f (patch)
treee73634ddd358d588b3c0a133207a89b7f9c53da0 /pk/vm.c
parenta502c24732b1eb9f13c9addde81f2be536092fe1 (diff)
downloadpk-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.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/pk/vm.c b/pk/vm.c
index d7371c5..6f02930 100644
--- a/pk/vm.c
+++ b/pk/vm.c
@@ -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