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);