pc64: fix vmap
VMAP address calculation was all wrong resulting in vmaps get mapped into KZERO map.
This commit is contained in:
parent
0850718033
commit
e289fd8ccd
1 changed files with 5 additions and 4 deletions
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue