Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | #ifndef _LINUX_MM_PAGE_IDLE_H #define _LINUX_MM_PAGE_IDLE_H #include <linux/bitops.h> #include <linux/page-flags.h> #include <linux/page_ext.h> #ifdef CONFIG_IDLE_PAGE_TRACKING #ifdef CONFIG_64BIT static inline bool page_is_young(struct page *page) { return PageYoung(page); } static inline void set_page_young(struct page *page) { SetPageYoung(page); } static inline bool test_and_clear_page_young(struct page *page) { return TestClearPageYoung(page); } static inline bool page_is_idle(struct page *page) { return PageIdle(page); } static inline void set_page_idle(struct page *page) { SetPageIdle(page); } static inline void clear_page_idle(struct page *page) { ClearPageIdle(page); } #else /* !CONFIG_64BIT */ /* * If there is not enough space to store Idle and Young bits in page flags, use * page ext flags instead. */ extern struct page_ext_operations page_idle_ops; static inline bool page_is_young(struct page *page) { return test_bit(PAGE_EXT_YOUNG, &lookup_page_ext(page)->flags); } static inline void set_page_young(struct page *page) { set_bit(PAGE_EXT_YOUNG, &lookup_page_ext(page)->flags); } static inline bool test_and_clear_page_young(struct page *page) { return test_and_clear_bit(PAGE_EXT_YOUNG, &lookup_page_ext(page)->flags); } static inline bool page_is_idle(struct page *page) { return test_bit(PAGE_EXT_IDLE, &lookup_page_ext(page)->flags); } static inline void set_page_idle(struct page *page) { set_bit(PAGE_EXT_IDLE, &lookup_page_ext(page)->flags); } static inline void clear_page_idle(struct page *page) { clear_bit(PAGE_EXT_IDLE, &lookup_page_ext(page)->flags); } #endif /* CONFIG_64BIT */ #else /* !CONFIG_IDLE_PAGE_TRACKING */ static inline bool page_is_young(struct page *page) { return false; } static inline void set_page_young(struct page *page) { } static inline bool test_and_clear_page_young(struct page *page) { return false; } static inline bool page_is_idle(struct page *page) { return false; } static inline void set_page_idle(struct page *page) { } static inline void clear_page_idle(struct page *page) { } #endif /* CONFIG_IDLE_PAGE_TRACKING */ #endif /* _LINUX_MM_PAGE_IDLE_H */ |