diff options
author | Mel Gorman <mgorman@suse.de> | 2012-10-19 09:07:31 -0400 |
---|---|---|
committer | Mel Gorman <mgorman@suse.de> | 2012-12-11 09:28:35 -0500 |
commit | 7b2a2d4a18fffac3c4872021529b0657896db788 (patch) | |
tree | a0f05be191f12711a774368f6feb15bcd2eebf1a /include/linux/migrate.h | |
parent | 5647bc293ab15f66a7b1cda850c5e9d162a6c7c2 (diff) |
mm: migrate: Add a tracepoint for migrate_pages
The pgmigrate_success and pgmigrate_fail vmstat counters tells the user
about migration activity but not the type or the reason. This patch adds
a tracepoint to identify the type of page migration and why the page is
being migrated.
Signed-off-by: Mel Gorman <mgorman@suse.de>
Reviewed-by: Rik van Riel <riel@redhat.com>
Diffstat (limited to 'include/linux/migrate.h')
-rw-r--r-- | include/linux/migrate.h | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/include/linux/migrate.h b/include/linux/migrate.h index ce7e6671968b..9d1c159e2427 100644 --- a/include/linux/migrate.h +++ b/include/linux/migrate.h | |||
@@ -7,6 +7,15 @@ | |||
7 | 7 | ||
8 | typedef struct page *new_page_t(struct page *, unsigned long private, int **); | 8 | typedef struct page *new_page_t(struct page *, unsigned long private, int **); |
9 | 9 | ||
10 | enum migrate_reason { | ||
11 | MR_COMPACTION, | ||
12 | MR_MEMORY_FAILURE, | ||
13 | MR_MEMORY_HOTPLUG, | ||
14 | MR_SYSCALL, /* also applies to cpusets */ | ||
15 | MR_MEMPOLICY_MBIND, | ||
16 | MR_CMA | ||
17 | }; | ||
18 | |||
10 | #ifdef CONFIG_MIGRATION | 19 | #ifdef CONFIG_MIGRATION |
11 | 20 | ||
12 | extern void putback_lru_pages(struct list_head *l); | 21 | extern void putback_lru_pages(struct list_head *l); |
@@ -14,7 +23,7 @@ extern int migrate_page(struct address_space *, | |||
14 | struct page *, struct page *, enum migrate_mode); | 23 | struct page *, struct page *, enum migrate_mode); |
15 | extern int migrate_pages(struct list_head *l, new_page_t x, | 24 | extern int migrate_pages(struct list_head *l, new_page_t x, |
16 | unsigned long private, bool offlining, | 25 | unsigned long private, bool offlining, |
17 | enum migrate_mode mode); | 26 | enum migrate_mode mode, int reason); |
18 | extern int migrate_huge_page(struct page *, new_page_t x, | 27 | extern int migrate_huge_page(struct page *, new_page_t x, |
19 | unsigned long private, bool offlining, | 28 | unsigned long private, bool offlining, |
20 | enum migrate_mode mode); | 29 | enum migrate_mode mode); |
@@ -35,7 +44,7 @@ extern int migrate_huge_page_move_mapping(struct address_space *mapping, | |||
35 | static inline void putback_lru_pages(struct list_head *l) {} | 44 | static inline void putback_lru_pages(struct list_head *l) {} |
36 | static inline int migrate_pages(struct list_head *l, new_page_t x, | 45 | static inline int migrate_pages(struct list_head *l, new_page_t x, |
37 | unsigned long private, bool offlining, | 46 | unsigned long private, bool offlining, |
38 | enum migrate_mode mode) { return -ENOSYS; } | 47 | enum migrate_mode mode, int reason) { return -ENOSYS; } |
39 | static inline int migrate_huge_page(struct page *page, new_page_t x, | 48 | static inline int migrate_huge_page(struct page *page, new_page_t x, |
40 | unsigned long private, bool offlining, | 49 | unsigned long private, bool offlining, |
41 | enum migrate_mode mode) { return -ENOSYS; } | 50 | enum migrate_mode mode) { return -ENOSYS; } |