aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/mm_inline.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/mm_inline.h')
-rw-r--r--include/linux/mm_inline.h49
1 files changed, 38 insertions, 11 deletions
diff --git a/include/linux/mm_inline.h b/include/linux/mm_inline.h
index 895bc4e93039..2704729777ef 100644
--- a/include/linux/mm_inline.h
+++ b/include/linux/mm_inline.h
@@ -1,40 +1,67 @@
1static inline void 1static inline void
2add_page_to_lru_list(struct zone *zone, struct page *page, enum lru_list l)
3{
4 list_add(&page->lru, &zone->lru[l].list);
5 __inc_zone_state(zone, NR_LRU_BASE + l);
6}
7
8static inline void
9del_page_from_lru_list(struct zone *zone, struct page *page, enum lru_list l)
10{
11 list_del(&page->lru);
12 __dec_zone_state(zone, NR_LRU_BASE + l);
13}
14
15static inline void
2add_page_to_active_list(struct zone *zone, struct page *page) 16add_page_to_active_list(struct zone *zone, struct page *page)
3{ 17{
4 list_add(&page->lru, &zone->active_list); 18 add_page_to_lru_list(zone, page, LRU_ACTIVE);
5 __inc_zone_state(zone, NR_ACTIVE);
6} 19}
7 20
8static inline void 21static inline void
9add_page_to_inactive_list(struct zone *zone, struct page *page) 22add_page_to_inactive_list(struct zone *zone, struct page *page)
10{ 23{
11 list_add(&page->lru, &zone->inactive_list); 24 add_page_to_lru_list(zone, page, LRU_INACTIVE);
12 __inc_zone_state(zone, NR_INACTIVE);
13} 25}
14 26
15static inline void 27static inline void
16del_page_from_active_list(struct zone *zone, struct page *page) 28del_page_from_active_list(struct zone *zone, struct page *page)
17{ 29{
18 list_del(&page->lru); 30 del_page_from_lru_list(zone, page, LRU_ACTIVE);
19 __dec_zone_state(zone, NR_ACTIVE);
20} 31}
21 32
22static inline void 33static inline void
23del_page_from_inactive_list(struct zone *zone, struct page *page) 34del_page_from_inactive_list(struct zone *zone, struct page *page)
24{ 35{
25 list_del(&page->lru); 36 del_page_from_lru_list(zone, page, LRU_INACTIVE);
26 __dec_zone_state(zone, NR_INACTIVE);
27} 37}
28 38
29static inline void 39static inline void
30del_page_from_lru(struct zone *zone, struct page *page) 40del_page_from_lru(struct zone *zone, struct page *page)
31{ 41{
42 enum lru_list l = LRU_INACTIVE;
43
32 list_del(&page->lru); 44 list_del(&page->lru);
33 if (PageActive(page)) { 45 if (PageActive(page)) {
34 __ClearPageActive(page); 46 __ClearPageActive(page);
35 __dec_zone_state(zone, NR_ACTIVE); 47 l = LRU_ACTIVE;
36 } else {
37 __dec_zone_state(zone, NR_INACTIVE);
38 } 48 }
49 __dec_zone_state(zone, NR_LRU_BASE + l);
39} 50}
40 51
52/**
53 * page_lru - which LRU list should a page be on?
54 * @page: the page to test
55 *
56 * Returns the LRU list a page should be on, as an index
57 * into the array of LRU lists.
58 */
59static inline enum lru_list page_lru(struct page *page)
60{
61 enum lru_list lru = LRU_BASE;
62
63 if (PageActive(page))
64 lru += LRU_ACTIVE;
65
66 return lru;
67}