diff options
| -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)) { | 
