diff options
Diffstat (limited to 'include/linux/mm_inline.h')
-rw-r--r-- | include/linux/mm_inline.h | 49 |
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 @@ | |||
1 | static inline void | 1 | static inline void |
2 | add_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 | |||
8 | static inline void | ||
9 | del_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 | |||
15 | static inline void | ||
2 | add_page_to_active_list(struct zone *zone, struct page *page) | 16 | add_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 | ||
8 | static inline void | 21 | static inline void |
9 | add_page_to_inactive_list(struct zone *zone, struct page *page) | 22 | add_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 | ||
15 | static inline void | 27 | static inline void |
16 | del_page_from_active_list(struct zone *zone, struct page *page) | 28 | del_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 | ||
22 | static inline void | 33 | static inline void |
23 | del_page_from_inactive_list(struct zone *zone, struct page *page) | 34 | del_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 | ||
29 | static inline void | 39 | static inline void |
30 | del_page_from_lru(struct zone *zone, struct page *page) | 40 | del_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 | */ | ||
59 | static 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 | } | ||