Add a helper for detecting page map pages Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
diff --git a/kern/include/page_alloc.h b/kern/include/page_alloc.h index ad9c0fa..484f62d 100644 --- a/kern/include/page_alloc.h +++ b/kern/include/page_alloc.h
@@ -81,3 +81,9 @@ void lock_page(struct page *page); void unlock_page(struct page *page); void print_pageinfo(struct page *page); +static inline bool page_is_pagemap(struct page *page); + +static inline bool page_is_pagemap(struct page *page) +{ + return atomic_read(&page->pg_flags) & PG_PAGEMAP ? true : false; +}
diff --git a/kern/src/mm.c b/kern/src/mm.c index 9476deb..0890591 100644 --- a/kern/src/mm.c +++ b/kern/src/mm.c
@@ -626,7 +626,7 @@ if (exec) icache_flush_page(0, page2kva(page)); ret = map_page_at_addr(p, page, va + i * PGSIZE, pte_prot); - if (atomic_read(&page->pg_flags) & PG_PAGEMAP) + if (page_is_pagemap(page)) pm_put_page(page); if (ret) break; @@ -860,7 +860,7 @@ return 0; page = pa2page(pte_get_paddr(pte)); pte_clear(pte); - if (!(atomic_read(&page->pg_flags) & PG_PAGEMAP)) + if (!page_is_pagemap(page)) page_decref(page); return 0; } @@ -905,7 +905,7 @@ /* Helper - drop the page differently based on where it is from */ static void __put_page(struct page *page) { - if (atomic_read(&page->pg_flags) & PG_PAGEMAP) + if (page_is_pagemap(page)) pm_put_page(page); else page_decref(page); @@ -1068,7 +1068,7 @@ /* the VMR's existence in the PM (via the mmap) allows us to have PTE point * to a_page without it magically being reallocated. For non-PM memory * (anon memory or private pages) we transferred the ref to the PTE. */ - if (atomic_read(&a_page->pg_flags) & PG_PAGEMAP) + if (page_is_pagemap(a_page)) pm_put_page(a_page); out: spin_unlock(&p->vmr_lock);