diff options
-rw-r--r-- | arch/s390/mm/pgtable.c | 12 | ||||
-rw-r--r-- | arch/sparc/mm/tlb.c | 12 | ||||
-rw-r--r-- | include/linux/mm.h | 1 | ||||
-rw-r--r-- | mm/pgtable-generic.c | 12 |
4 files changed, 19 insertions, 18 deletions
diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c index 0a2e5e086749..1ea18fcfa211 100644 --- a/arch/s390/mm/pgtable.c +++ b/arch/s390/mm/pgtable.c | |||
@@ -1244,11 +1244,11 @@ void pgtable_trans_huge_deposit(struct mm_struct *mm, pmd_t *pmdp, | |||
1244 | assert_spin_locked(&mm->page_table_lock); | 1244 | assert_spin_locked(&mm->page_table_lock); |
1245 | 1245 | ||
1246 | /* FIFO */ | 1246 | /* FIFO */ |
1247 | if (!mm->pmd_huge_pte) | 1247 | if (!pmd_huge_pte(mm, pmdp)) |
1248 | INIT_LIST_HEAD(lh); | 1248 | INIT_LIST_HEAD(lh); |
1249 | else | 1249 | else |
1250 | list_add(lh, (struct list_head *) mm->pmd_huge_pte); | 1250 | list_add(lh, (struct list_head *) pmd_huge_pte(mm, pmdp)); |
1251 | mm->pmd_huge_pte = pgtable; | 1251 | pmd_huge_pte(mm, pmdp) = pgtable; |
1252 | } | 1252 | } |
1253 | 1253 | ||
1254 | pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp) | 1254 | pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp) |
@@ -1260,12 +1260,12 @@ pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp) | |||
1260 | assert_spin_locked(&mm->page_table_lock); | 1260 | assert_spin_locked(&mm->page_table_lock); |
1261 | 1261 | ||
1262 | /* FIFO */ | 1262 | /* FIFO */ |
1263 | pgtable = mm->pmd_huge_pte; | 1263 | pgtable = pmd_huge_pte(mm, pmdp); |
1264 | lh = (struct list_head *) pgtable; | 1264 | lh = (struct list_head *) pgtable; |
1265 | if (list_empty(lh)) | 1265 | if (list_empty(lh)) |
1266 | mm->pmd_huge_pte = NULL; | 1266 | pmd_huge_pte(mm, pmdp) = NULL; |
1267 | else { | 1267 | else { |
1268 | mm->pmd_huge_pte = (pgtable_t) lh->next; | 1268 | pmd_huge_pte(mm, pmdp) = (pgtable_t) lh->next; |
1269 | list_del(lh); | 1269 | list_del(lh); |
1270 | } | 1270 | } |
1271 | ptep = (pte_t *) pgtable; | 1271 | ptep = (pte_t *) pgtable; |
diff --git a/arch/sparc/mm/tlb.c b/arch/sparc/mm/tlb.c index 7a91f288c708..656cc46a81f5 100644 --- a/arch/sparc/mm/tlb.c +++ b/arch/sparc/mm/tlb.c | |||
@@ -196,11 +196,11 @@ void pgtable_trans_huge_deposit(struct mm_struct *mm, pmd_t *pmdp, | |||
196 | assert_spin_locked(&mm->page_table_lock); | 196 | assert_spin_locked(&mm->page_table_lock); |
197 | 197 | ||
198 | /* FIFO */ | 198 | /* FIFO */ |
199 | if (!mm->pmd_huge_pte) | 199 | if (!pmd_huge_pte(mm, pmdp)) |
200 | INIT_LIST_HEAD(lh); | 200 | INIT_LIST_HEAD(lh); |
201 | else | 201 | else |
202 | list_add(lh, (struct list_head *) mm->pmd_huge_pte); | 202 | list_add(lh, (struct list_head *) pmd_huge_pte(mm, pmdp)); |
203 | mm->pmd_huge_pte = pgtable; | 203 | pmd_huge_pte(mm, pmdp) = pgtable; |
204 | } | 204 | } |
205 | 205 | ||
206 | pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp) | 206 | pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp) |
@@ -211,12 +211,12 @@ pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp) | |||
211 | assert_spin_locked(&mm->page_table_lock); | 211 | assert_spin_locked(&mm->page_table_lock); |
212 | 212 | ||
213 | /* FIFO */ | 213 | /* FIFO */ |
214 | pgtable = mm->pmd_huge_pte; | 214 | pgtable = pmd_huge_pte(mm, pmdp); |
215 | lh = (struct list_head *) pgtable; | 215 | lh = (struct list_head *) pgtable; |
216 | if (list_empty(lh)) | 216 | if (list_empty(lh)) |
217 | mm->pmd_huge_pte = NULL; | 217 | pmd_huge_pte(mm, pmdp) = NULL; |
218 | else { | 218 | else { |
219 | mm->pmd_huge_pte = (pgtable_t) lh->next; | 219 | pmd_huge_pte(mm, pmdp) = (pgtable_t) lh->next; |
220 | list_del(lh); | 220 | list_del(lh); |
221 | } | 221 | } |
222 | pte_val(pgtable[0]) = 0; | 222 | pte_val(pgtable[0]) = 0; |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 4f4ca41fcf27..861cad53b744 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -1383,6 +1383,7 @@ static inline spinlock_t *pmd_lockptr(struct mm_struct *mm, pmd_t *pmd) | |||
1383 | return &mm->page_table_lock; | 1383 | return &mm->page_table_lock; |
1384 | } | 1384 | } |
1385 | 1385 | ||
1386 | #define pmd_huge_pte(mm, pmd) ((mm)->pmd_huge_pte) | ||
1386 | 1387 | ||
1387 | static inline spinlock_t *pmd_lock(struct mm_struct *mm, pmd_t *pmd) | 1388 | static inline spinlock_t *pmd_lock(struct mm_struct *mm, pmd_t *pmd) |
1388 | { | 1389 | { |
diff --git a/mm/pgtable-generic.c b/mm/pgtable-generic.c index 3929a40bd6c0..41fee3e5d570 100644 --- a/mm/pgtable-generic.c +++ b/mm/pgtable-generic.c | |||
@@ -154,11 +154,11 @@ void pgtable_trans_huge_deposit(struct mm_struct *mm, pmd_t *pmdp, | |||
154 | assert_spin_locked(&mm->page_table_lock); | 154 | assert_spin_locked(&mm->page_table_lock); |
155 | 155 | ||
156 | /* FIFO */ | 156 | /* FIFO */ |
157 | if (!mm->pmd_huge_pte) | 157 | if (!pmd_huge_pte(mm, pmdp)) |
158 | INIT_LIST_HEAD(&pgtable->lru); | 158 | INIT_LIST_HEAD(&pgtable->lru); |
159 | else | 159 | else |
160 | list_add(&pgtable->lru, &mm->pmd_huge_pte->lru); | 160 | list_add(&pgtable->lru, &pmd_huge_pte(mm, pmdp)->lru); |
161 | mm->pmd_huge_pte = pgtable; | 161 | pmd_huge_pte(mm, pmdp) = pgtable; |
162 | } | 162 | } |
163 | #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ | 163 | #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ |
164 | #endif | 164 | #endif |
@@ -173,11 +173,11 @@ pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp) | |||
173 | assert_spin_locked(&mm->page_table_lock); | 173 | assert_spin_locked(&mm->page_table_lock); |
174 | 174 | ||
175 | /* FIFO */ | 175 | /* FIFO */ |
176 | pgtable = mm->pmd_huge_pte; | 176 | pgtable = pmd_huge_pte(mm, pmdp); |
177 | if (list_empty(&pgtable->lru)) | 177 | if (list_empty(&pgtable->lru)) |
178 | mm->pmd_huge_pte = NULL; | 178 | pmd_huge_pte(mm, pmdp) = NULL; |
179 | else { | 179 | else { |
180 | mm->pmd_huge_pte = list_entry(pgtable->lru.next, | 180 | pmd_huge_pte(mm, pmdp) = list_entry(pgtable->lru.next, |
181 | struct page, lru); | 181 | struct page, lru); |
182 | list_del(&pgtable->lru); | 182 | list_del(&pgtable->lru); |
183 | } | 183 | } |