Blame view

include/linux/page_idle.h 2.58 KB
33c3fc71c   Vladimir Davydov   mm: introduce idl...
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
  #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)
  {
f86e42719   Yang Shi   mm: check the ret...
49
50
51
52
53
54
  	struct page_ext *page_ext = lookup_page_ext(page);
  
  	if (unlikely(!page_ext))
  		return false;
  
  	return test_bit(PAGE_EXT_YOUNG, &page_ext->flags);
33c3fc71c   Vladimir Davydov   mm: introduce idl...
55
56
57
58
  }
  
  static inline void set_page_young(struct page *page)
  {
f86e42719   Yang Shi   mm: check the ret...
59
60
61
62
63
64
  	struct page_ext *page_ext = lookup_page_ext(page);
  
  	if (unlikely(!page_ext))
  		return;
  
  	set_bit(PAGE_EXT_YOUNG, &page_ext->flags);
33c3fc71c   Vladimir Davydov   mm: introduce idl...
65
66
67
68
  }
  
  static inline bool test_and_clear_page_young(struct page *page)
  {
f86e42719   Yang Shi   mm: check the ret...
69
70
71
72
73
74
  	struct page_ext *page_ext = lookup_page_ext(page);
  
  	if (unlikely(!page_ext))
  		return false;
  
  	return test_and_clear_bit(PAGE_EXT_YOUNG, &page_ext->flags);
33c3fc71c   Vladimir Davydov   mm: introduce idl...
75
76
77
78
  }
  
  static inline bool page_is_idle(struct page *page)
  {
f86e42719   Yang Shi   mm: check the ret...
79
80
81
82
83
84
  	struct page_ext *page_ext = lookup_page_ext(page);
  
  	if (unlikely(!page_ext))
  		return false;
  
  	return test_bit(PAGE_EXT_IDLE, &page_ext->flags);
33c3fc71c   Vladimir Davydov   mm: introduce idl...
85
86
87
88
  }
  
  static inline void set_page_idle(struct page *page)
  {
f86e42719   Yang Shi   mm: check the ret...
89
90
91
92
93
94
  	struct page_ext *page_ext = lookup_page_ext(page);
  
  	if (unlikely(!page_ext))
  		return;
  
  	set_bit(PAGE_EXT_IDLE, &page_ext->flags);
33c3fc71c   Vladimir Davydov   mm: introduce idl...
95
96
97
98
  }
  
  static inline void clear_page_idle(struct page *page)
  {
f86e42719   Yang Shi   mm: check the ret...
99
100
101
102
103
104
  	struct page_ext *page_ext = lookup_page_ext(page);
  
  	if (unlikely(!page_ext))
  		return;
  
  	clear_bit(PAGE_EXT_IDLE, &page_ext->flags);
33c3fc71c   Vladimir Davydov   mm: introduce idl...
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
  }
  #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 */