X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fthreads%2Fpalloc.c;h=545a7d4c20e15937b2c298dcf3190536388cc55b;hb=5a121c17dc3088074ff51b99dbe353b25e7adff1;hp=c99abe35daaafb66568bce5b24256be1e02a6660;hpb=c9bd85496b98a3cc5ab79701644f73be7d910890;p=pintos-anon diff --git a/src/threads/palloc.c b/src/threads/palloc.c index c99abe3..545a7d4 100644 --- a/src/threads/palloc.c +++ b/src/threads/palloc.c @@ -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); + ASSERT (bitmap_all (pool->used_map, page_idx, page_cnt)); + bitmap_set_multiple (pool->used_map, page_idx, page_cnt, false); } /* Frees the page at PAGE. */