diff options
author | Jeff Dike <jdike@addtoit.com> | 2008-02-05 01:31:06 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-05 12:44:29 -0500 |
commit | 909e90d3c410b684e564729145f7c20dad887757 (patch) | |
tree | 31c4e5ade894f185a7eeb04ce7023cb7da6b9277 /arch | |
parent | 1adfd6095e1c654dce5a692db5aa5a2b2a8d6b0d (diff) |
uml: 64-bit tlb fixes
Some 64-bit tlb fixes -
moved pmd_page_vaddr to pgtable.h since it's the same for both
2-level and 3-level page tables
fixed a bogus cast on pud_page_vaddr
made the address checking in update_*_range more careful
Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/um/kernel/tlb.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/um/kernel/tlb.c b/arch/um/kernel/tlb.c index ef5a2a20d351..8127ca8d5957 100644 --- a/arch/um/kernel/tlb.c +++ b/arch/um/kernel/tlb.c | |||
@@ -207,7 +207,7 @@ static inline int update_pte_range(pmd_t *pmd, unsigned long addr, | |||
207 | else if (pte_newprot(*pte)) | 207 | else if (pte_newprot(*pte)) |
208 | ret = add_mprotect(addr, PAGE_SIZE, prot, hvc); | 208 | ret = add_mprotect(addr, PAGE_SIZE, prot, hvc); |
209 | *pte = pte_mkuptodate(*pte); | 209 | *pte = pte_mkuptodate(*pte); |
210 | } while (pte++, addr += PAGE_SIZE, ((addr != end) && !ret)); | 210 | } while (pte++, addr += PAGE_SIZE, ((addr < end) && !ret)); |
211 | return ret; | 211 | return ret; |
212 | } | 212 | } |
213 | 213 | ||
@@ -229,7 +229,7 @@ static inline int update_pmd_range(pud_t *pud, unsigned long addr, | |||
229 | } | 229 | } |
230 | } | 230 | } |
231 | else ret = update_pte_range(pmd, addr, next, hvc); | 231 | else ret = update_pte_range(pmd, addr, next, hvc); |
232 | } while (pmd++, addr = next, ((addr != end) && !ret)); | 232 | } while (pmd++, addr = next, ((addr < end) && !ret)); |
233 | return ret; | 233 | return ret; |
234 | } | 234 | } |
235 | 235 | ||
@@ -251,7 +251,7 @@ static inline int update_pud_range(pgd_t *pgd, unsigned long addr, | |||
251 | } | 251 | } |
252 | } | 252 | } |
253 | else ret = update_pmd_range(pud, addr, next, hvc); | 253 | else ret = update_pmd_range(pud, addr, next, hvc); |
254 | } while (pud++, addr = next, ((addr != end) && !ret)); | 254 | } while (pud++, addr = next, ((addr < end) && !ret)); |
255 | return ret; | 255 | return ret; |
256 | } | 256 | } |
257 | 257 | ||
@@ -274,7 +274,7 @@ void fix_range_common(struct mm_struct *mm, unsigned long start_addr, | |||
274 | } | 274 | } |
275 | } | 275 | } |
276 | else ret = update_pud_range(pgd, addr, next, &hvc); | 276 | else ret = update_pud_range(pgd, addr, next, &hvc); |
277 | } while (pgd++, addr = next, ((addr != end_addr) && !ret)); | 277 | } while (pgd++, addr = next, ((addr < end_addr) && !ret)); |
278 | 278 | ||
279 | if (!ret) | 279 | if (!ret) |
280 | ret = do_ops(&hvc, hvc.index, 1); | 280 | ret = do_ops(&hvc, hvc.index, 1); |