Lines Matching refs:folio
275 const struct page *: (const struct folio *)_compound_head(p), \
276 struct page *: (struct folio *)_compound_head(p)))
287 #define folio_page(folio, n) nth_page(&(folio)->page, n) argument
314 static const unsigned long *const_folio_flags(const struct folio *folio, in const_folio_flags() argument
317 const struct page *page = &folio->page; in const_folio_flags()
324 static unsigned long *folio_flags(struct folio *folio, unsigned n) in folio_flags() argument
326 struct page *page = &folio->page; in folio_flags()
385 static __always_inline bool folio_test_##name(const struct folio *folio) \
386 { return test_bit(PG_##name, const_folio_flags(folio, page)); }
389 static __always_inline void folio_set_##name(struct folio *folio) \
390 { set_bit(PG_##name, folio_flags(folio, page)); }
393 static __always_inline void folio_clear_##name(struct folio *folio) \
394 { clear_bit(PG_##name, folio_flags(folio, page)); }
397 static __always_inline void __folio_set_##name(struct folio *folio) \
398 { __set_bit(PG_##name, folio_flags(folio, page)); }
401 static __always_inline void __folio_clear_##name(struct folio *folio) \
402 { __clear_bit(PG_##name, folio_flags(folio, page)); }
405 static __always_inline bool folio_test_set_##name(struct folio *folio) \
406 { return test_and_set_bit(PG_##name, folio_flags(folio, page)); }
409 static __always_inline bool folio_test_clear_##name(struct folio *folio) \
410 { return test_and_clear_bit(PG_##name, folio_flags(folio, page)); }
467 static inline bool folio_test_##name(const struct folio *folio) \
470 static inline void folio_set_##name(struct folio *folio) { }
472 static inline void folio_clear_##name(struct folio *folio) { }
474 static inline void __folio_set_##name(struct folio *folio) { }
476 static inline void __folio_clear_##name(struct folio *folio) { }
478 static inline bool folio_test_set_##name(struct folio *folio) \
481 static inline bool folio_test_clear_##name(struct folio *folio) \
599 static __always_inline bool folio_test_swapcache(const struct folio *folio) in PAGEFLAG()
601 return folio_test_swapbacked(folio) && in PAGEFLAG()
602 test_bit(PG_swapcache, const_folio_flags(folio, 0)); in PAGEFLAG()
699 static __always_inline bool folio_mapping_flags(const struct folio *folio) in FOLIO_SET_FLAG()
701 return ((unsigned long)folio->mapping & PAGE_MAPPING_FLAGS) != 0; in FOLIO_SET_FLAG()
709 static __always_inline bool folio_test_anon(const struct folio *folio) in folio_test_anon() argument
711 return ((unsigned long)folio->mapping & PAGE_MAPPING_ANON) != 0; in folio_test_anon()
719 static __always_inline bool __folio_test_movable(const struct folio *folio) in __folio_test_movable() argument
721 return ((unsigned long)folio->mapping & PAGE_MAPPING_FLAGS) == in __folio_test_movable()
738 static __always_inline bool folio_test_ksm(const struct folio *folio) in folio_test_ksm() argument
740 return ((unsigned long)folio->mapping & PAGE_MAPPING_FLAGS) == in folio_test_ksm()
767 static inline bool folio_xor_flags_has_waiters(struct folio *folio, in folio_xor_flags_has_waiters() argument
770 return xor_unlock_is_negative_byte(mask, folio_flags(folio, 0)); in folio_xor_flags_has_waiters()
783 static inline bool folio_test_uptodate(const struct folio *folio) in folio_test_uptodate() argument
785 bool ret = test_bit(PG_uptodate, const_folio_flags(folio, 0)); in folio_test_uptodate()
805 static __always_inline void __folio_mark_uptodate(struct folio *folio) in __folio_mark_uptodate() argument
808 __set_bit(PG_uptodate, folio_flags(folio, 0)); in __folio_mark_uptodate()
811 static __always_inline void folio_mark_uptodate(struct folio *folio) in folio_mark_uptodate() argument
819 set_bit(PG_uptodate, folio_flags(folio, 0)); in folio_mark_uptodate()
824 __folio_mark_uptodate((struct folio *)page); in __SetPageUptodate()
829 folio_mark_uptodate((struct folio *)page); in SetPageUptodate()
834 void __folio_start_writeback(struct folio *folio, bool keep_write);
837 #define folio_start_writeback(folio) \ argument
838 __folio_start_writeback(folio, false)
839 #define folio_start_writeback_keepwrite(folio) \ argument
840 __folio_start_writeback(folio, true)
842 static __always_inline bool folio_test_head(const struct folio *folio) in folio_test_head() argument
844 return test_bit(PG_head, const_folio_flags(folio, FOLIO_PF_ANY)); in folio_test_head()
863 static inline bool folio_test_large(const struct folio *folio) in __SETPAGEFLAG()
865 return folio_test_head(folio); in __SETPAGEFLAG()
986 static __always_inline bool folio_test_##fname(const struct folio *folio) \
988 return data_race(folio->page.page_type >> 24) == PGTY_##lname; \
990 static __always_inline void __folio_set_##fname(struct folio *folio) \
992 if (folio_test_##fname(folio)) \
994 VM_BUG_ON_FOLIO(data_race(folio->page.page_type) != UINT_MAX, \
995 folio); \
996 folio->page.page_type = (unsigned int)PGTY_##lname << 24; \
998 static __always_inline void __folio_clear_##fname(struct folio *folio) \
1000 if (folio->page.page_type == UINT_MAX) \
1002 VM_BUG_ON_FOLIO(!folio_test_##fname(folio), folio); \
1003 folio->page.page_type = UINT_MAX; \
1128 const struct folio *folio; in is_page_hwpoison() local
1132 folio = page_folio(page); in is_page_hwpoison()
1133 return folio_test_hugetlb(folio) && PageHWPoison(&folio->page); in is_page_hwpoison()
1136 static inline bool folio_contain_hwpoisoned_page(struct folio *folio) in folio_contain_hwpoisoned_page() argument
1138 return folio_test_hwpoison(folio) || in folio_contain_hwpoisoned_page()
1139 (folio_test_large(folio) && folio_test_has_hwpoisoned(folio)); in folio_contain_hwpoisoned_page()
1224 static inline int folio_has_private(const struct folio *folio) in folio_has_private() argument
1226 return !!(folio->flags & PAGE_FLAGS_PRIVATE); in folio_has_private()