aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/mm_inline.h
diff options
context:
space:
mode:
authorChristoph Lameter <cl@linux-foundation.org>2008-10-18 23:26:14 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-10-20 11:50:25 -0400
commitb69408e88bd86b98feb7b9a38fd865e1ddb29827 (patch)
treeb19277c29fe624870ba776cc6ada59928cd2796d /include/linux/mm_inline.h
parent62695a84eb8f2e718bf4dfb21700afaa7a08e0ea (diff)
vmscan: Use an indexed array for LRU variables
Currently we are defining explicit variables for the inactive and active list. An indexed array can be more generic and avoid repeating similar code in several places in the reclaim code. We are saving a few bytes in terms of code size: Before: text data bss dec hex filename 4097753 573120 4092484 8763357 85b7dd vmlinux After: text data bss dec hex filename 4097729 573120 4092484 8763333 85b7c5 vmlinux Having an easy way to add new lru lists may ease future work on the reclaim code. Signed-off-by: Rik van Riel <riel@redhat.com> Signed-off-by: Lee Schermerhorn <lee.schermerhorn@hp.com> Signed-off-by: Christoph Lameter <cl@linux-foundation.org> Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
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}