summaryrefslogtreecommitdiff
path: root/sys/src/9/pc64/mmu.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2016-11-17 01:28:11 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2016-11-17 01:28:11 +0100
commit1a782fda3e0fcc3205dc4b2a9b6ef3a75f68efb7 (patch)
tree13bb6137aa1ca75ba0b84524c48de55c44caaa17 /sys/src/9/pc64/mmu.c
parent78d2a52577c39f5f580b925931aa1ffbdc3d16be (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.c32
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;
-}