Make pagedir_destroy(NULL) a no-op.
[pintos-anon] / src / userprog / pagedir.c
index 1bad9b2cc8c7fde6baa6124ed06c9f6945e7cb60..1edd0ff1931f84888a922558fe73ac0f78365f95 100644 (file)
@@ -19,7 +19,10 @@ pagedir_destroy (uint32_t *pd)
 {
   uint32_t *pde;
 
-  for (pde = pd; pde < pd + PGSIZE / sizeof *pde; pde++)
+  if (pd == NULL)
+    return;
+
+  for (pde = pd; pde < pd + pd_no (PHYS_BASE); pde++)
     if (*pde & PG_P) 
       {
         uint32_t *pt = pde_get_pt (*pde);
@@ -40,7 +43,6 @@ lookup_page (uint32_t *pd, void *upage, bool create)
   uint32_t *pde;
 
   ASSERT (pd != NULL);
-  ASSERT (pg_ofs (upage) == 0);
   ASSERT (upage < PHYS_BASE);
 
   /* Check for a page table for UPAGE.
@@ -84,9 +86,9 @@ pagedir_set_page (uint32_t *pd, void *upage, void *kpage,
 }
 
 void *
-pagedir_get_page (uint32_t *pd, void *upage) 
+pagedir_get_page (uint32_t *pd, const void *upage) 
 {
-  uint32_t *pte = lookup_page (pd, upage, false);
+  uint32_t *pte = lookup_page (pd, (void *) upage, false);
   return pte != NULL && *pte != 0 ? pte_get_page (*pte) : NULL;
 }