diff options
Diffstat (limited to 'include/linux/swapops.h')
-rw-r--r-- | include/linux/swapops.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/include/linux/swapops.h b/include/linux/swapops.h index 87b9d14c710d..ec639aa3a1d3 100644 --- a/include/linux/swapops.h +++ b/include/linux/swapops.h | |||
@@ -67,3 +67,56 @@ static inline pte_t swp_entry_to_pte(swp_entry_t entry) | |||
67 | BUG_ON(pte_file(__swp_entry_to_pte(arch_entry))); | 67 | BUG_ON(pte_file(__swp_entry_to_pte(arch_entry))); |
68 | return __swp_entry_to_pte(arch_entry); | 68 | return __swp_entry_to_pte(arch_entry); |
69 | } | 69 | } |
70 | |||
71 | #ifdef CONFIG_MIGRATION | ||
72 | static inline swp_entry_t make_migration_entry(struct page *page, int write) | ||
73 | { | ||
74 | BUG_ON(!PageLocked(page)); | ||
75 | return swp_entry(write ? SWP_MIGRATION_WRITE : SWP_MIGRATION_READ, | ||
76 | page_to_pfn(page)); | ||
77 | } | ||
78 | |||
79 | static inline int is_migration_entry(swp_entry_t entry) | ||
80 | { | ||
81 | return unlikely(swp_type(entry) == SWP_MIGRATION_READ || | ||
82 | swp_type(entry) == SWP_MIGRATION_WRITE); | ||
83 | } | ||
84 | |||
85 | static inline int is_write_migration_entry(swp_entry_t entry) | ||
86 | { | ||
87 | return unlikely(swp_type(entry) == SWP_MIGRATION_WRITE); | ||
88 | } | ||
89 | |||
90 | static inline struct page *migration_entry_to_page(swp_entry_t entry) | ||
91 | { | ||
92 | struct page *p = pfn_to_page(swp_offset(entry)); | ||
93 | /* | ||
94 | * Any use of migration entries may only occur while the | ||
95 | * corresponding page is locked | ||
96 | */ | ||
97 | BUG_ON(!PageLocked(p)); | ||
98 | return p; | ||
99 | } | ||
100 | |||
101 | static inline void make_migration_entry_read(swp_entry_t *entry) | ||
102 | { | ||
103 | *entry = swp_entry(SWP_MIGRATION_READ, swp_offset(*entry)); | ||
104 | } | ||
105 | |||
106 | extern void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, | ||
107 | unsigned long address); | ||
108 | #else | ||
109 | |||
110 | #define make_migration_entry(page, write) swp_entry(0, 0) | ||
111 | #define is_migration_entry(swp) 0 | ||
112 | #define migration_entry_to_page(swp) NULL | ||
113 | static inline void make_migration_entry_read(swp_entry_t *entryp) { } | ||
114 | static inline void migration_entry_wait(struct mm_struct *mm, pmd_t *pmd, | ||
115 | unsigned long address) { } | ||
116 | static inline int is_write_migration_entry(swp_entry_t entry) | ||
117 | { | ||
118 | return 0; | ||
119 | } | ||
120 | |||
121 | #endif | ||
122 | |||