diff options
| -rw-r--r-- | sys/src/9/pc64/l.s | 7 | ||||
| -rw-r--r-- | sys/src/9/pc64/mmu.c | 8 |
2 files changed, 5 insertions, 10 deletions
diff --git a/sys/src/9/pc64/l.s b/sys/src/9/pc64/l.s index a1cc976f3..61276f0e7 100644 --- a/sys/src/9/pc64/l.s +++ b/sys/src/9/pc64/l.s @@ -449,11 +449,8 @@ TEXT _wrmsrinst(SB), $0 MOVQ BP, AX /* BP set to -1 if traped */ RET -TEXT invlpg(SB), 1, $-4 /* INVLPG va+0(FP) */ - MOVQ RARG, va+0(FP) - - INVLPG va+0(FP) - +TEXT invlpg(SB), 1, $-4 + INVLPG (RARG) RET TEXT wbinvd(SB), 1, $-4 diff --git a/sys/src/9/pc64/mmu.c b/sys/src/9/pc64/mmu.c index 6f27ac25e..02f96d55a 100644 --- a/sys/src/9/pc64/mmu.c +++ b/sys/src/9/pc64/mmu.c @@ -485,15 +485,13 @@ kmap(Page *page) return (KMap*)KADDR(pa); x = splhi(); - va = KMAP + ((uintptr)up->kmapindex << PGSHIFT); + va = KMAP + (((uintptr)up->kmapindex++ << PGSHIFT) & (KMAPSIZE-1)); pte = mmuwalk(m->pml4, va, 0, 1); - if(pte == 0 || *pte & PTEVALID) + if(pte == 0 || (*pte & PTEVALID) != 0) panic("kmap: pa=%#p va=%#p", pa, va); *pte = pa | PTEWRITE|PTEVALID; - up->kmapindex = (up->kmapindex + 1) % (1<<PTSHIFT); - if(up->kmapindex == 0) - mmuflushtlb(); splx(x); + invlpg(va); return (KMap*)va; } |
