diff --git a/vm.c b/vm.c
index 8064ca2d4bdc9872d482759e1117284258bcdea0..5f7407979fc8295edc7c0d7707f1b40fcffbca3a 100644
--- a/vm.c
+++ b/vm.c
@@ -25,32 +25,14 @@
 #define PHYSTOP  0x300000
 #define USERTOP  0xA0000
 
-static uint kerntext;  // Linker start kernel at 1MB
+static uint kerntext;  // Linker starts kernel at 1MB
 static uint kerntsz;   
 static uint kerndata;
 static uint kerndsz;
 static uint kernend;
 static uint freesz;
-
 pde_t *kpgdir;         // One kernel page table for scheduler procs
 
-void
-printstack()
-{
-  uint *ebp = (uint *) rebp();
-  uint i;
-  cprintf("kernel stack: 0x%x\n", ebp);
-  while (ebp) {
-    if (ebp < (uint *) kerntext) // don't follow user ebp
-      return;
-    cprintf("  ebp %x  saved ebp %x eip %x  args", ebp, ebp[0], ebp[1]);
-    for (i = 0; i < 4; i++)
-      cprintf(" %x", ebp[2+i]);
-    cprintf("\n");
-    ebp = (uint *) ebp[0];
-  }
-}
-
 void
 printpgdir(pde_t *pgdir)
 {
@@ -99,19 +81,15 @@ walkpgdir(pde_t *pgdir, const void *va, int create)
 }
 
 static int
-mappages(pde_t *pgdir, void *la, uint size, uint pa, int perm, int p)
+mappages(pde_t *pgdir, void *la, uint size, uint pa, int perm)
 {
   uint i;
   pte_t *pte;
 
-  if (p) 
-    cprintf("mappages: pgdir 0x%x la 0x%x sz %d(0x%x) pa 0x%x, perm 0x%x\n", 
-	    pgdir, la, size, size, pa, perm);
   for (i = 0; i < size; i += PGSIZE) {
     if (!(pte = walkpgdir(pgdir, (void*)(la + i), 1)))
       return 0;
     *pte = (pa + i) | perm | PTE_P;
-    if (p) cprintf("mappages 0x%x 0x%x pp %d\n", la+i, *pte, PPN(*pte));
   }
   return 1;
 }
@@ -178,19 +156,19 @@ setupkvm(void)
     return 0;
   memset(pgdir, 0, PGSIZE);
   // Map IO space from 640K to 1Mbyte
-  if (!mappages(pgdir, (void *)USERTOP, 0x60000, USERTOP, PTE_W, 0))
+  if (!mappages(pgdir, (void *)USERTOP, 0x60000, USERTOP, PTE_W))
     return 0;
   // Map kernel text from kern text addr read-only
-  if (!mappages(pgdir, (void *) kerntext, kerntsz, kerntext, 0, 0))
+  if (!mappages(pgdir, (void *) kerntext, kerntsz, kerntext, 0))
     return 0;
   // Map kernel data form kern data addr R/W
-  if (!mappages(pgdir, (void *) kerndata, kerndsz, kerndata, PTE_W, 0))
+  if (!mappages(pgdir, (void *) kerndata, kerndsz, kerndata, PTE_W))
     return 0;
   // Map dynamically-allocated memory read/write (kernel stacks, user mem)
-  if (!mappages(pgdir, (void *) kernend, freesz, PADDR(kernend), PTE_W, 0))
+  if (!mappages(pgdir, (void *) kernend, freesz, PADDR(kernend), PTE_W))
     return 0;
   // Map devices such as ioapic, lapic, ...
-  if (!mappages(pgdir, (void *)0xFE000000, 0x2000000, 0xFE000000, PTE_W, 0))
+  if (!mappages(pgdir, (void *)0xFE000000, 0x2000000, 0xFE000000, PTE_W))
     return 0;
   return pgdir;
 }
@@ -218,7 +196,7 @@ allocuvm(pde_t *pgdir, char *addr, uint sz)
       return 0;
     }
     memset(mem, 0, PGSIZE);
-    mappages(pgdir, addr + i, PGSIZE, PADDR(mem), PTE_W|PTE_U, 0);
+    mappages(pgdir, addr + i, PGSIZE, PADDR(mem), PTE_W|PTE_U);
   }
   return 1;
 }
@@ -304,12 +282,13 @@ copyuvm(pde_t *pgdir, uint sz)
     if (!(mem = kalloc(PGSIZE)))
       return 0;
     memmove(mem, (char *)pa, PGSIZE);
-    if (!mappages(d, (void *)i, PGSIZE, PADDR(mem), PTE_W|PTE_U, 0))
+    if (!mappages(d, (void *)i, PGSIZE, PADDR(mem), PTE_W|PTE_U))
       return 0;
   }
   return d;
 }
 
+// Gather about physical memory layout.  Called once during boot.
 void
 pminit(void)
 {
@@ -345,7 +324,8 @@ jkstack(void)
   jstack((uint) top);
 }
 
-// Allocate one page table for the machine for the kernel address space
+// Allocate one page table for the machine for the kernel address
+// space for scheduler processes.
 void
 kvmalloc(void)
 {