diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-10 10:16:58 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-10 10:16:58 -0500 |
commit | 53910146dfc118d9f86eeb88775ccd6fafebb09d (patch) | |
tree | 1fc312c78d4fc04ff64383ed5c07b6fb16346b13 | |
parent | 5551638acb3dbfa1c92335464158fccfa46f5a00 (diff) | |
parent | 77058e1adcc439151db41f2b84e4867a88113cd8 (diff) |
Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
powerpc: Fix address masking bug in hpte_need_flush()
-rw-r--r-- | arch/powerpc/mm/tlb_hash64.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/powerpc/mm/tlb_hash64.c b/arch/powerpc/mm/tlb_hash64.c index 282d9306361f..1ec06576f619 100644 --- a/arch/powerpc/mm/tlb_hash64.c +++ b/arch/powerpc/mm/tlb_hash64.c | |||
@@ -63,15 +63,21 @@ void hpte_need_flush(struct mm_struct *mm, unsigned long addr, | |||
63 | if (huge) { | 63 | if (huge) { |
64 | #ifdef CONFIG_HUGETLB_PAGE | 64 | #ifdef CONFIG_HUGETLB_PAGE |
65 | psize = get_slice_psize(mm, addr); | 65 | psize = get_slice_psize(mm, addr); |
66 | /* Mask the address for the correct page size */ | ||
67 | addr &= ~((1UL << mmu_psize_defs[psize].shift) - 1); | ||
66 | #else | 68 | #else |
67 | BUG(); | 69 | BUG(); |
68 | psize = pte_pagesize_index(mm, addr, pte); /* shutup gcc */ | 70 | psize = pte_pagesize_index(mm, addr, pte); /* shutup gcc */ |
69 | #endif | 71 | #endif |
70 | } else | 72 | } else { |
71 | psize = pte_pagesize_index(mm, addr, pte); | 73 | psize = pte_pagesize_index(mm, addr, pte); |
74 | /* Mask the address for the standard page size. If we | ||
75 | * have a 64k page kernel, but the hardware does not | ||
76 | * support 64k pages, this might be different from the | ||
77 | * hardware page size encoded in the slice table. */ | ||
78 | addr &= PAGE_MASK; | ||
79 | } | ||
72 | 80 | ||
73 | /* Mask the address for the correct page size */ | ||
74 | addr &= ~((1UL << mmu_psize_defs[psize].shift) - 1); | ||
75 | 81 | ||
76 | /* Build full vaddr */ | 82 | /* Build full vaddr */ |
77 | if (!is_kernel_addr(addr)) { | 83 | if (!is_kernel_addr(addr)) { |