it turns out that calculating physical address of pml4 is faster
than reading the machine register, so pass it explicitely.
void meminit0(void);
void memreserve(uintptr, uintptr);
void mfence(void);
-#define mmuflushtlb() putcr3(getcr3())
+#define mmuflushtlb(pml4) putcr3(pml4)
void mmuinit(void);
uintptr *mmuwalk(uintptr*, uintptr, int, int);
char* mtrr(uvlong, uvlong, char *);
if((pte = mmuwalk(m->pml4, REBOOTADDR, 0, 0)) != nil)
*pte &= ~PTENOEXEC;
- mmuflushtlb();
+ mmuflushtlb(PADDR(m->pml4));
/* setup reboot trampoline function */
f = (void*)REBOOTADDR;
* You might think it would be a win not to do this in that case,
* especially on VMware, but it turns out not to matter.
*/
- mmuflushtlb();
+ mmuflushtlb(PADDR(m->pml4));
}
tss->rsp1[1] = stack >> 32;
tss->rsp2[0] = (u32int)stack;
tss->rsp2[1] = stack >> 32;
- mmuflushtlb();
+ mmuflushtlb(PADDR(m->pml4));
}
static void kernelro(void);