0001
0002 #ifndef __LINUX_PAGE_OWNER_H
0003 #define __LINUX_PAGE_OWNER_H
0004
0005 #include <linux/jump_label.h>
0006
0007 #ifdef CONFIG_PAGE_OWNER
0008 extern struct static_key_false page_owner_inited;
0009 extern struct page_ext_operations page_owner_ops;
0010
0011 extern void __reset_page_owner(struct page *page, unsigned short order);
0012 extern void __set_page_owner(struct page *page,
0013 unsigned short order, gfp_t gfp_mask);
0014 extern void __split_page_owner(struct page *page, unsigned int nr);
0015 extern void __folio_copy_owner(struct folio *newfolio, struct folio *old);
0016 extern void __set_page_owner_migrate_reason(struct page *page, int reason);
0017 extern void __dump_page_owner(const struct page *page);
0018 extern void pagetypeinfo_showmixedcount_print(struct seq_file *m,
0019 pg_data_t *pgdat, struct zone *zone);
0020
0021 static inline void reset_page_owner(struct page *page, unsigned short order)
0022 {
0023 if (static_branch_unlikely(&page_owner_inited))
0024 __reset_page_owner(page, order);
0025 }
0026
0027 static inline void set_page_owner(struct page *page,
0028 unsigned short order, gfp_t gfp_mask)
0029 {
0030 if (static_branch_unlikely(&page_owner_inited))
0031 __set_page_owner(page, order, gfp_mask);
0032 }
0033
0034 static inline void split_page_owner(struct page *page, unsigned int nr)
0035 {
0036 if (static_branch_unlikely(&page_owner_inited))
0037 __split_page_owner(page, nr);
0038 }
0039 static inline void folio_copy_owner(struct folio *newfolio, struct folio *old)
0040 {
0041 if (static_branch_unlikely(&page_owner_inited))
0042 __folio_copy_owner(newfolio, old);
0043 }
0044 static inline void set_page_owner_migrate_reason(struct page *page, int reason)
0045 {
0046 if (static_branch_unlikely(&page_owner_inited))
0047 __set_page_owner_migrate_reason(page, reason);
0048 }
0049 static inline void dump_page_owner(const struct page *page)
0050 {
0051 if (static_branch_unlikely(&page_owner_inited))
0052 __dump_page_owner(page);
0053 }
0054 #else
0055 static inline void reset_page_owner(struct page *page, unsigned short order)
0056 {
0057 }
0058 static inline void set_page_owner(struct page *page,
0059 unsigned int order, gfp_t gfp_mask)
0060 {
0061 }
0062 static inline void split_page_owner(struct page *page,
0063 unsigned short order)
0064 {
0065 }
0066 static inline void folio_copy_owner(struct folio *newfolio, struct folio *folio)
0067 {
0068 }
0069 static inline void set_page_owner_migrate_reason(struct page *page, int reason)
0070 {
0071 }
0072 static inline void dump_page_owner(const struct page *page)
0073 {
0074 }
0075 #endif
0076 #endif