Make freeing pages not require the pool lock,
[pintos-anon] / src / threads / palloc.c
index c99abe35daaafb66568bce5b24256be1e02a6660..7e6a967a9d884559a672ee382ba135be35552330 100644 (file)
@@ -85,8 +85,9 @@ palloc_get_multiple (enum palloc_flags flags, size_t page_cnt)
     return NULL;
 
   lock_acquire (&pool->lock);
-
   page_idx = bitmap_scan_and_flip (pool->used_map, 0, page_cnt, false);
+  lock_release (&pool->lock);
+
   if (page_idx != BITMAP_ERROR)
     pages = pool->base + PGSIZE * page_idx;
   else
@@ -103,8 +104,6 @@ palloc_get_multiple (enum palloc_flags flags, size_t page_cnt)
         PANIC ("palloc_get: out of pages");
     }
 
-  lock_release (&pool->lock);
-  
   return pages;
 }
 
@@ -144,10 +143,8 @@ palloc_free_multiple (void *pages, size_t page_cnt)
   memset (pages, 0xcc, PGSIZE * page_cnt);
 #endif
 
-  lock_acquire (&pool->lock);
   ASSERT (bitmap_all (pool->used_map, page_idx, page_idx + page_cnt));
   bitmap_set_multiple (pool->used_map, page_idx, page_idx + page_cnt, false);
-  lock_release (&pool->lock);
 }
 
 /* Frees the page at PAGE. */