diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-11-17 01:28:11 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-11-17 01:28:11 +0100 |
commit | 1a782fda3e0fcc3205dc4b2a9b6ef3a75f68efb7 (patch) | |
tree | 13bb6137aa1ca75ba0b84524c48de55c44caaa17 /sys/src/9/pc64/mmu.c | |
parent | 78d2a52577c39f5f580b925931aa1ffbdc3d16be (diff) |
pc64: check if vmap() range fits in VMAPLEN window, remove unneeded vmapsync(), rename fault386() to faultamd64()
Diffstat (limited to 'sys/src/9/pc64/mmu.c')
-rw-r--r-- | sys/src/9/pc64/mmu.c | 32 |
1 files changed, 5 insertions, 27 deletions
diff --git a/sys/src/9/pc64/mmu.c b/sys/src/9/pc64/mmu.c index 34d1c28a2..18b8878f7 100644 --- a/sys/src/9/pc64/mmu.c +++ b/sys/src/9/pc64/mmu.c @@ -506,6 +506,9 @@ kunmap(KMap *k) /* * Add a device mapping to the vmap range. + * note that the VMAP and KZERO PDPs are shared + * between processors (see mpstartap) so no + * synchronization is being done. */ void* vmap(uintptr pa, int size) @@ -513,6 +516,8 @@ vmap(uintptr pa, int size) uintptr va; int o; + if(pa+size > VMAPSIZE) + return 0; va = pa+VMAP; /* * might be asking for less than a page. @@ -530,30 +535,3 @@ vunmap(void *v, int) { paddr(v); /* will panic on error */ } - -/* - * vmapsync() is currently unused as the VMAP and KZERO PDPs - * are shared between processors. (see mpstartap) - */ -int -vmapsync(uintptr va) -{ - uintptr *pte1, *pte2; - int level; - - if(va < VMAP || m->machno == 0) - return 0; - - for(level=0; level<2; level++){ - pte1 = mmuwalk(MACHP(0)->pml4, va, level, 0); - if(pte1 && *pte1 & PTEVALID){ - pte2 = mmuwalk(m->pml4, va, level, 1); - if(pte2 == 0) - break; - if(pte1 != pte2) - *pte2 = *pte1; - return 1; - } - } - return 0; -} |