pc64: fix vmap

VMAP address calculation was all wrong resulting
in vmaps get mapped into KZERO map.
This commit is contained in:
cinap_lenrek 2014-02-02 05:10:58 +01:00
parent 0850718033
commit e289fd8ccd

View file

@ -149,7 +149,7 @@ paddr(void *v)
if(va >= KZERO) if(va >= KZERO)
return va-KZERO; return va-KZERO;
if(va >= VMAP) if(va >= VMAP)
return va-VMAP; return va-(VMAP-(-KZERO));
panic("paddr: va=%#p pc=%#p", va, getcallerpc(&v)); panic("paddr: va=%#p pc=%#p", va, getcallerpc(&v));
return 0; return 0;
} }
@ -260,7 +260,7 @@ pmap(uintptr *pml4, uintptr pa, uintptr va, int size)
pte = mmuwalk(pml4, va, ++l, 0); pte = mmuwalk(pml4, va, ++l, 0);
if(pte && (*pte & PTESIZE)){ if(pte && (*pte & PTESIZE)){
flags |= PTESIZE; flags |= PTESIZE;
z = va & PGLSZ(l)-1; z = va & (PGLSZ(l)-1);
va -= z; va -= z;
pa -= z; pa -= z;
size += z; size += z;
@ -442,6 +442,7 @@ kunmap(KMap *k)
if(pte == 0 || (*pte & PTEVALID) == 0) if(pte == 0 || (*pte & PTEVALID) == 0)
panic("kunmap: va=%#p", va); panic("kunmap: va=%#p", va);
*pte = 0; *pte = 0;
mmuflushtlb();
splx(x); splx(x);
} }
@ -454,12 +455,12 @@ vmap(uintptr pa, int size)
uintptr va; uintptr va;
int o; int o;
if(size <= 0 || pa & ~0xffffffffull) if(size <= 0 || pa >= -VMAP)
panic("vmap: pa=%#p size=%d pc=%#p", pa, size, getcallerpc(&pa)); panic("vmap: pa=%#p size=%d pc=%#p", pa, size, getcallerpc(&pa));
if(cankaddr(pa) >= size) if(cankaddr(pa) >= size)
va = pa+KZERO; va = pa+KZERO;
else else
va = pa+VMAP; va = pa+(VMAP-(-KZERO));
/* /*
* might be asking for less than a page. * might be asking for less than a page.
*/ */