0001
0002 #ifndef _LINUX_MM_PAGE_IDLE_H
0003 #define _LINUX_MM_PAGE_IDLE_H
0004
0005 #include <linux/bitops.h>
0006 #include <linux/page-flags.h>
0007 #include <linux/page_ext.h>
0008
0009 #ifdef CONFIG_PAGE_IDLE_FLAG
0010
0011 #ifndef CONFIG_64BIT
0012
0013
0014
0015
0016
0017 static inline bool folio_test_young(struct folio *folio)
0018 {
0019 struct page_ext *page_ext = lookup_page_ext(&folio->page);
0020
0021 if (unlikely(!page_ext))
0022 return false;
0023
0024 return test_bit(PAGE_EXT_YOUNG, &page_ext->flags);
0025 }
0026
0027 static inline void folio_set_young(struct folio *folio)
0028 {
0029 struct page_ext *page_ext = lookup_page_ext(&folio->page);
0030
0031 if (unlikely(!page_ext))
0032 return;
0033
0034 set_bit(PAGE_EXT_YOUNG, &page_ext->flags);
0035 }
0036
0037 static inline bool folio_test_clear_young(struct folio *folio)
0038 {
0039 struct page_ext *page_ext = lookup_page_ext(&folio->page);
0040
0041 if (unlikely(!page_ext))
0042 return false;
0043
0044 return test_and_clear_bit(PAGE_EXT_YOUNG, &page_ext->flags);
0045 }
0046
0047 static inline bool folio_test_idle(struct folio *folio)
0048 {
0049 struct page_ext *page_ext = lookup_page_ext(&folio->page);
0050
0051 if (unlikely(!page_ext))
0052 return false;
0053
0054 return test_bit(PAGE_EXT_IDLE, &page_ext->flags);
0055 }
0056
0057 static inline void folio_set_idle(struct folio *folio)
0058 {
0059 struct page_ext *page_ext = lookup_page_ext(&folio->page);
0060
0061 if (unlikely(!page_ext))
0062 return;
0063
0064 set_bit(PAGE_EXT_IDLE, &page_ext->flags);
0065 }
0066
0067 static inline void folio_clear_idle(struct folio *folio)
0068 {
0069 struct page_ext *page_ext = lookup_page_ext(&folio->page);
0070
0071 if (unlikely(!page_ext))
0072 return;
0073
0074 clear_bit(PAGE_EXT_IDLE, &page_ext->flags);
0075 }
0076 #endif
0077
0078 #else
0079
0080 static inline bool folio_test_young(struct folio *folio)
0081 {
0082 return false;
0083 }
0084
0085 static inline void folio_set_young(struct folio *folio)
0086 {
0087 }
0088
0089 static inline bool folio_test_clear_young(struct folio *folio)
0090 {
0091 return false;
0092 }
0093
0094 static inline bool folio_test_idle(struct folio *folio)
0095 {
0096 return false;
0097 }
0098
0099 static inline void folio_set_idle(struct folio *folio)
0100 {
0101 }
0102
0103 static inline void folio_clear_idle(struct folio *folio)
0104 {
0105 }
0106
0107 #endif
0108
0109 static inline bool page_is_young(struct page *page)
0110 {
0111 return folio_test_young(page_folio(page));
0112 }
0113
0114 static inline void set_page_young(struct page *page)
0115 {
0116 folio_set_young(page_folio(page));
0117 }
0118
0119 static inline bool test_and_clear_page_young(struct page *page)
0120 {
0121 return folio_test_clear_young(page_folio(page));
0122 }
0123
0124 static inline bool page_is_idle(struct page *page)
0125 {
0126 return folio_test_idle(page_folio(page));
0127 }
0128
0129 static inline void set_page_idle(struct page *page)
0130 {
0131 folio_set_idle(page_folio(page));
0132 }
0133
0134 static inline void clear_page_idle(struct page *page)
0135 {
0136 folio_clear_idle(page_folio(page));
0137 }
0138 #endif