X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fthreads%2Fpalloc.c;h=22a6b15972de40c4bde0cc4dab622c40caf3d157;hb=1d49cf3e7dc4bf8bc8a646b22365b23099ea8932;hp=545a7d4c20e15937b2c298dcf3190536388cc55b;hpb=07ee003af55dc3aab779e95ef2a4f095f6b65964;p=pintos-anon diff --git a/src/threads/palloc.c b/src/threads/palloc.c index 545a7d4..22a6b15 100644 --- a/src/threads/palloc.c +++ b/src/threads/palloc.c @@ -107,7 +107,8 @@ palloc_get_multiple (enum palloc_flags flags, size_t page_cnt) return pages; } -/* Obtains and returns a single free page. +/* Obtains a single free page and returns its kernel virtual + address. If PAL_USER is set, the page is obtained from the user pool, otherwise from the kernel pool. If PAL_ZERO is set in FLAGS, then the page is filled with zeros. If no pages are @@ -162,7 +163,7 @@ init_pool (struct pool *p, void *base, size_t page_cnt, const char *name) /* We'll put the pool's used_map at its base. Calculate the space needed for the bitmap and subtract it from the pool's size. */ - size_t bm_pages = DIV_ROUND_UP (bitmap_needed_bytes (page_cnt), PGSIZE); + size_t bm_pages = DIV_ROUND_UP (bitmap_buf_size (page_cnt), PGSIZE); if (bm_pages > page_cnt) PANIC ("Not enough memory in %s for bitmap.", name); page_cnt -= bm_pages; @@ -170,9 +171,8 @@ init_pool (struct pool *p, void *base, size_t page_cnt, const char *name) printf ("%zu pages available in %s.\n", page_cnt, name); /* Initialize the pool. */ - lock_init (&p->lock, name); - p->used_map = bitmap_create_preallocated (page_cnt, base, - bm_pages * PGSIZE); + lock_init (&p->lock); + p->used_map = bitmap_create_in_buf (page_cnt, base, bm_pages * PGSIZE); p->base = base + bm_pages * PGSIZE; }