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 | |||
