diff --git a/defs.h b/defs.h
index 0197e700a858005104fce77e317a8018ef871b17..02da96f545789b2bdc61a56f7470f04ee95ff202 100644
--- a/defs.h
+++ b/defs.h
@@ -155,7 +155,7 @@ void            uartputc(int);
 void            pminit(void);
 void            ksegment(void);
 void            kvmalloc(void);
-void            vminit(void);
+void            vmenable(void);
 pde_t*          setupkvm(void);
 char*           uva2ka(pde_t*, char*);
 int             allocuvm(pde_t*, char*, uint);
diff --git a/main.c b/main.c
index c8aa53a024a789ff02e8a9739e401005950b0262..1a49bc609e7ff8ee68349129888d05da9b755af9 100644
--- a/main.c
+++ b/main.c
@@ -67,7 +67,7 @@ mpmain(void)
     ksegment();
     lapicinit(cpunum());
   }
-  vminit();        // turn on paging
+  vmenable();        // turn on paging
   cprintf("cpu%d: starting\n", cpu->id);
   idtinit();       // load idt register
   xchg(&cpu->booted, 1);
diff --git a/vm.c b/vm.c
index 20afa28828ca182d69d26f44c9c34cd9ac5d3ccb..262f079e8b5d22692571d19f15510b750632a0c0 100644
--- a/vm.c
+++ b/vm.c
@@ -369,11 +369,11 @@ kvmalloc(void)
 
 // Turn on paging.
 void
-vminit(void)
+vmenable(void)
 {
   uint cr0;
 
-  lcr3(PADDR(kpgdir));
+  switchkvm(); // load kpgdir into cr3
   cr0 = rcr0();
   cr0 |= CR0_PG;
   lcr0(cr0);