Lines Matching refs:page
170 struct page; /* forward declaration */
172 static inline struct page *compound_head(struct page *page) in compound_head() argument
174 unsigned long head = READ_ONCE(page->compound_head); in compound_head()
177 return (struct page *) (head - 1); in compound_head()
178 return page; in compound_head()
181 static __always_inline int PageTail(struct page *page) in PageTail() argument
183 return READ_ONCE(page->compound_head) & 1; in PageTail()
186 static __always_inline int PageCompound(struct page *page) in PageCompound() argument
188 return test_bit(PG_head, &page->flags) || PageTail(page); in PageCompound()
192 static inline int PagePoisoned(const struct page *page) in PagePoisoned() argument
194 return page->flags == PAGE_POISON_PATTERN; in PagePoisoned()
198 void page_init_poison(struct page *page, size_t size);
200 static inline void page_init_poison(struct page *page, size_t size) in page_init_poison() argument
228 #define PF_POISONED_CHECK(page) ({ \ argument
229 VM_BUG_ON_PGFLAGS(PagePoisoned(page), page); \
230 page; })
231 #define PF_ANY(page, enforce) PF_POISONED_CHECK(page) argument
232 #define PF_HEAD(page, enforce) PF_POISONED_CHECK(compound_head(page)) argument
233 #define PF_ONLY_HEAD(page, enforce) ({ \ argument
234 VM_BUG_ON_PGFLAGS(PageTail(page), page); \
235 PF_POISONED_CHECK(page); })
236 #define PF_NO_TAIL(page, enforce) ({ \ argument
237 VM_BUG_ON_PGFLAGS(enforce && PageTail(page), page); \
238 PF_POISONED_CHECK(compound_head(page)); })
239 #define PF_NO_COMPOUND(page, enforce) ({ \ argument
240 VM_BUG_ON_PGFLAGS(enforce && PageCompound(page), page); \
241 PF_POISONED_CHECK(page); })
247 static __always_inline int Page##uname(struct page *page) \
248 { return test_bit(PG_##lname, &policy(page, 0)->flags); }
251 static __always_inline void SetPage##uname(struct page *page) \
252 { set_bit(PG_##lname, &policy(page, 1)->flags); }
255 static __always_inline void ClearPage##uname(struct page *page) \
256 { clear_bit(PG_##lname, &policy(page, 1)->flags); }
259 static __always_inline void __SetPage##uname(struct page *page) \
260 { __set_bit(PG_##lname, &policy(page, 1)->flags); }
263 static __always_inline void __ClearPage##uname(struct page *page) \
264 { __clear_bit(PG_##lname, &policy(page, 1)->flags); }
267 static __always_inline int TestSetPage##uname(struct page *page) \
268 { return test_and_set_bit(PG_##lname, &policy(page, 1)->flags); }
271 static __always_inline int TestClearPage##uname(struct page *page) \
272 { return test_and_clear_bit(PG_##lname, &policy(page, 1)->flags); }
289 static inline int Page##uname(const struct page *page) { return 0; }
292 static inline void SetPage##uname(struct page *page) { }
295 static inline void ClearPage##uname(struct page *page) { }
298 static inline void __ClearPage##uname(struct page *page) { }
301 static inline int TestSetPage##uname(struct page *page) { return 0; }
304 static inline int TestClearPage##uname(struct page *page) { return 0; }
380 static __always_inline int PageSwapCache(struct page *page) in PAGEFLAG()
383 page = compound_head(page); in PAGEFLAG()
385 return PageSwapBacked(page) && test_bit(PG_swapcache, &page->flags); in PAGEFLAG()
417 extern bool set_hwpoison_free_buddy_page(struct page *page);
420 static inline bool set_hwpoison_free_buddy_page(struct page *page)
456 static __always_inline int PageMappingFlags(struct page *page) in TESTPAGEFLAG()
458 return ((unsigned long)page->mapping & PAGE_MAPPING_FLAGS) != 0; in TESTPAGEFLAG()
461 static __always_inline int PageAnon(struct page *page) in PageAnon() argument
463 page = compound_head(page); in PageAnon()
464 return ((unsigned long)page->mapping & PAGE_MAPPING_ANON) != 0; in PageAnon()
467 static __always_inline int __PageMovable(struct page *page) in __PageMovable() argument
469 return ((unsigned long)page->mapping & PAGE_MAPPING_FLAGS) == in __PageMovable()
480 static __always_inline int PageKsm(struct page *page) in PageKsm() argument
482 page = compound_head(page); in PageKsm()
483 return ((unsigned long)page->mapping & PAGE_MAPPING_FLAGS) == in PageKsm()
490 u64 stable_page_flags(struct page *page);
492 static inline int PageUptodate(struct page *page) in PageUptodate() argument
495 page = compound_head(page); in PageUptodate()
496 ret = test_bit(PG_uptodate, &(page)->flags); in PageUptodate()
511 static __always_inline void __SetPageUptodate(struct page *page) in __SetPageUptodate() argument
513 VM_BUG_ON_PAGE(PageTail(page), page); in __SetPageUptodate()
515 __set_bit(PG_uptodate, &page->flags); in __SetPageUptodate()
518 static __always_inline void SetPageUptodate(struct page *page) in SetPageUptodate() argument
520 VM_BUG_ON_PAGE(PageTail(page), page); in SetPageUptodate()
527 set_bit(PG_uptodate, &page->flags); in SetPageUptodate()
532 int test_clear_page_writeback(struct page *page);
533 int __test_set_page_writeback(struct page *page, bool keep_write);
535 #define test_set_page_writeback(page) \ argument
536 __test_set_page_writeback(page, false)
537 #define test_set_page_writeback_keepwrite(page) \ argument
538 __test_set_page_writeback(page, true)
540 static inline void set_page_writeback(struct page *page) in set_page_writeback() argument
542 test_set_page_writeback(page); in set_page_writeback()
545 static inline void set_page_writeback_keepwrite(struct page *page) in set_page_writeback_keepwrite() argument
547 test_set_page_writeback_keepwrite(page); in set_page_writeback_keepwrite()
552 static __always_inline void set_compound_head(struct page *page, struct page *head) in __PAGEFLAG()
554 WRITE_ONCE(page->compound_head, (unsigned long)head + 1); in __PAGEFLAG()
557 static __always_inline void clear_compound_head(struct page *page) in clear_compound_head() argument
559 WRITE_ONCE(page->compound_head, 0); in clear_compound_head()
563 static inline void ClearPageCompound(struct page *page) in ClearPageCompound() argument
565 BUG_ON(!PageHead(page)); in ClearPageCompound()
566 ClearPageHead(page); in ClearPageCompound()
573 int PageHuge(struct page *page);
574 int PageHeadHuge(struct page *page);
575 bool page_huge_active(struct page *page);
580 static inline bool page_huge_active(struct page *page) in TESTPAGEFLAG_FALSE()
596 static inline int PageTransHuge(struct page *page) in PageTransHuge() argument
598 VM_BUG_ON_PAGE(PageTail(page), page); in PageTransHuge()
599 return PageHead(page); in PageTransHuge()
607 static inline int PageTransCompound(struct page *page) in PageTransCompound() argument
609 return PageCompound(page); in PageTransCompound()
633 static inline int PageTransCompoundMap(struct page *page) in PageTransCompoundMap() argument
635 struct page *head; in PageTransCompoundMap()
637 if (!PageTransCompound(page)) in PageTransCompoundMap()
640 if (PageAnon(page)) in PageTransCompoundMap()
641 return atomic_read(&page->_mapcount) < 0; in PageTransCompoundMap()
643 head = compound_head(page); in PageTransCompoundMap()
645 return atomic_read(&page->_mapcount) == in PageTransCompoundMap()
654 static inline int PageTransTail(struct page *page) in PageTransTail() argument
656 return PageTail(page); in PageTransTail()
672 static inline int PageDoubleMap(struct page *page) in PageDoubleMap() argument
674 return PageHead(page) && test_bit(PG_double_map, &page[1].flags); in PageDoubleMap()
677 static inline void SetPageDoubleMap(struct page *page) in SetPageDoubleMap() argument
679 VM_BUG_ON_PAGE(!PageHead(page), page); in SetPageDoubleMap()
680 set_bit(PG_double_map, &page[1].flags); in SetPageDoubleMap()
683 static inline void ClearPageDoubleMap(struct page *page) in ClearPageDoubleMap() argument
685 VM_BUG_ON_PAGE(!PageHead(page), page); in ClearPageDoubleMap()
686 clear_bit(PG_double_map, &page[1].flags); in ClearPageDoubleMap()
688 static inline int TestSetPageDoubleMap(struct page *page) in TestSetPageDoubleMap() argument
690 VM_BUG_ON_PAGE(!PageHead(page), page); in TestSetPageDoubleMap()
691 return test_and_set_bit(PG_double_map, &page[1].flags); in TestSetPageDoubleMap()
694 static inline int TestClearPageDoubleMap(struct page *page) in TestClearPageDoubleMap() argument
696 VM_BUG_ON_PAGE(!PageHead(page), page); in TestClearPageDoubleMap()
697 return test_and_clear_bit(PG_double_map, &page[1].flags); in TestClearPageDoubleMap()
728 #define PageType(page, flag) \ in TESTPAGEFLAG_FALSE() argument
729 ((page->page_type & (PAGE_TYPE_BASE | flag)) == PAGE_TYPE_BASE) in TESTPAGEFLAG_FALSE()
731 static inline int page_has_type(struct page *page) in TESTPAGEFLAG_FALSE()
733 return (int)page->page_type < PAGE_MAPCOUNT_RESERVE; in TESTPAGEFLAG_FALSE()
737 static __always_inline int Page##uname(struct page *page) \
739 return PageType(page, PG_##lname); \
741 static __always_inline void __SetPage##uname(struct page *page) \
743 VM_BUG_ON_PAGE(!PageType(page, 0), page); \
744 page->page_type &= ~PG_##lname; \
746 static __always_inline void __ClearPage##uname(struct page *page) \
748 VM_BUG_ON_PAGE(!Page##uname(page), page); \
749 page->page_type |= PG_##lname; \
783 extern bool is_free_buddy_page(struct page *page);
791 static inline int PageSlabPfmemalloc(struct page *page) in PageSlabPfmemalloc() argument
793 VM_BUG_ON_PAGE(!PageSlab(page), page); in PageSlabPfmemalloc()
794 return PageActive(page); in PageSlabPfmemalloc()
797 static inline void SetPageSlabPfmemalloc(struct page *page) in SetPageSlabPfmemalloc() argument
799 VM_BUG_ON_PAGE(!PageSlab(page), page); in SetPageSlabPfmemalloc()
800 SetPageActive(page); in SetPageSlabPfmemalloc()
803 static inline void __ClearPageSlabPfmemalloc(struct page *page) in __ClearPageSlabPfmemalloc() argument
805 VM_BUG_ON_PAGE(!PageSlab(page), page); in __ClearPageSlabPfmemalloc()
806 __ClearPageActive(page); in __ClearPageSlabPfmemalloc()
809 static inline void ClearPageSlabPfmemalloc(struct page *page) in ClearPageSlabPfmemalloc() argument
811 VM_BUG_ON_PAGE(!PageSlab(page), page); in ClearPageSlabPfmemalloc()
812 ClearPageActive(page); in ClearPageSlabPfmemalloc()
852 static inline int page_has_private(struct page *page) in page_has_private() argument
854 return !!(page->flags & PAGE_FLAGS_PRIVATE); in page_has_private()