diff options
author | Andi Kleen <andi@firstfloor.org> | 2009-09-16 05:50:10 -0400 |
---|---|---|
committer | Andi Kleen <ak@linux.intel.com> | 2009-09-16 05:50:10 -0400 |
commit | 14fa31b89c5ae79e4131da41761378a6df674352 (patch) | |
tree | c6c79e89e0aa0b2efeaf657d4715250a406ab699 /include/linux/rmap.h | |
parent | a6e04aa92965565968573a220a35b4e907385697 (diff) |
HWPOISON: Use bitmask/action code for try_to_unmap behaviour
try_to_unmap currently has multiple modi (migration, munlock, normal unmap)
which are selected by magic flag variables. The logic is not very straight
forward, because each of these flag change multiple behaviours (e.g.
migration turns off aging, not only sets up migration ptes etc.)
Also the different flags interact in magic ways.
A later patch in this series adds another mode to try_to_unmap, so
this becomes quickly unmanageable.
Replace the different flags with a action code (migration, munlock, munmap)
and some additional flags as modifiers (ignore mlock, ignore aging).
This makes the logic more straight forward and allows easier extension
to new behaviours. Change all the caller to declare what they want to
do.
This patch is supposed to be a nop in behaviour. If anyone can prove
it is not that would be a bug.
Cc: Lee.Schermerhorn@hp.com
Cc: npiggin@suse.de
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Diffstat (limited to 'include/linux/rmap.h')
-rw-r--r-- | include/linux/rmap.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/include/linux/rmap.h b/include/linux/rmap.h index 8dff2ffab82c..4c4a2d4d289e 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h | |||
@@ -85,7 +85,18 @@ static inline void page_dup_rmap(struct page *page, struct vm_area_struct *vma, | |||
85 | */ | 85 | */ |
86 | int page_referenced(struct page *, int is_locked, | 86 | int page_referenced(struct page *, int is_locked, |
87 | struct mem_cgroup *cnt, unsigned long *vm_flags); | 87 | struct mem_cgroup *cnt, unsigned long *vm_flags); |
88 | int try_to_unmap(struct page *, int ignore_refs); | 88 | enum ttu_flags { |
89 | TTU_UNMAP = 0, /* unmap mode */ | ||
90 | TTU_MIGRATION = 1, /* migration mode */ | ||
91 | TTU_MUNLOCK = 2, /* munlock mode */ | ||
92 | TTU_ACTION_MASK = 0xff, | ||
93 | |||
94 | TTU_IGNORE_MLOCK = (1 << 8), /* ignore mlock */ | ||
95 | TTU_IGNORE_ACCESS = (1 << 9), /* don't age */ | ||
96 | }; | ||
97 | #define TTU_ACTION(x) ((x) & TTU_ACTION_MASK) | ||
98 | |||
99 | int try_to_unmap(struct page *, enum ttu_flags flags); | ||
89 | 100 | ||
90 | /* | 101 | /* |
91 | * Called from mm/filemap_xip.c to unmap empty zero page | 102 | * Called from mm/filemap_xip.c to unmap empty zero page |