@@ -1248,7 +1248,7 @@ static inline int page_to_nid(const struct page *page)
{
struct page *p = (struct page *)page;
- return (PF_POISONED_CHECK(p)->flags >> NODES_PGSHIFT) & NODES_MASK;
+ return (page_poison_check(p)->flags >> NODES_PGSHIFT) & NODES_MASK;
}
#endif
@@ -175,6 +175,18 @@ enum pageflags {
#ifndef __GENERATING_BOUNDS_H
+#define PAGE_POISON_PATTERN -1l
+static inline int PagePoisoned(const struct page *page)
+{
+ return page->flags == PAGE_POISON_PATTERN;
+}
+
+#define page_poison_check(page) ({ \
+ __typeof__(page) ___page = page; \
+ VM_BUG_ON_PAGE(PagePoisoned(___page), ___page); \
+ ___page; \
+})
+
#define compound_head(page) ({ \
__typeof__(page) _page = page; \
unsigned long head = READ_ONCE(_page->compound_head); \
@@ -193,12 +205,6 @@ static __always_inline int PageCompound(const struct page *page)
return test_bit(PG_head, &page->flags) || PageTail(page);
}
-#define PAGE_POISON_PATTERN -1l
-static inline int PagePoisoned(const struct page *page)
-{
- return page->flags == PAGE_POISON_PATTERN;
-}
-
#ifdef CONFIG_DEBUG_VM
void page_init_poison(struct page *page, size_t size);
#else
@@ -210,9 +216,6 @@ static inline void page_init_poison(struct page *page, size_t size)
/*
* Page flags policies wrt compound pages
*
- * PF_POISONED_CHECK
- * check if this struct page poisoned/uninitialized
- *
* PF_ANY:
* the page flag is relevant for small, head and tail pages.
*
@@ -230,20 +233,17 @@ static inline void page_init_poison(struct page *page, size_t size)
* PF_NO_COMPOUND:
* the page flag is not relevant for compound pages.
*/
-#define PF_POISONED_CHECK(page) ({ \
- VM_BUG_ON_PGFLAGS(PagePoisoned(page), page); \
- page; })
-#define PF_ANY(page, enforce) PF_POISONED_CHECK(page)
-#define PF_HEAD(page, enforce) PF_POISONED_CHECK(compound_head(page))
+#define PF_ANY(page, enforce) page_poison_check(page)
+#define PF_HEAD(page, enforce) page_poison_check(compound_head(page))
#define PF_ONLY_HEAD(page, enforce) ({ \
VM_BUG_ON_PGFLAGS(PageTail(page), page); \
- PF_POISONED_CHECK(page); })
+ page_poison_check(page); })
#define PF_NO_TAIL(page, enforce) ({ \
VM_BUG_ON_PGFLAGS(enforce && PageTail(page), page); \
- PF_POISONED_CHECK(compound_head(page)); })
+ page_poison_check(compound_head(page)); })
#define PF_NO_COMPOUND(page, enforce) ({ \
VM_BUG_ON_PGFLAGS(enforce && PageCompound(page), page); \
- PF_POISONED_CHECK(page); })
+ page_poison_check(page); })
/*
* Macros to create function definitions for page flags