diff options
| author | Paul Mackerras <paulus@samba.org> | 2011-09-20 15:58:10 -0400 |
|---|---|---|
| committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2011-09-22 20:21:33 -0400 |
| commit | 25c29f9e3242071bca1bee7ad919baf1888ae436 (patch) | |
| tree | 4568edb56ff09832d82344e3e9c32875413950d4 | |
| parent | 7b72c9f8750e32b3b08fab1bfef43350866ae8d1 (diff) | |
powerpc: Fix hugetlb with CONFIG_PPC_MM_SLICES=y
Commit 41151e77a4 ("powerpc: Hugetlb for BookE") added some
#ifdef CONFIG_MM_SLICES conditionals to hugetlb_get_unmapped_area()
and vma_mmu_pagesize(). Unfortunately this is not the correct config
symbol; it should be CONFIG_PPC_MM_SLICES. The result is that
attempting to use hugetlbfs on 64-bit Power server processors results
in an infinite stack recursion between get_unmapped_area() and
hugetlb_get_unmapped_area().
This fixes it by changing the #ifdef to use CONFIG_PPC_MM_SLICES
in those functions and also in book3e_hugetlb_preload().
Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
| -rw-r--r-- | arch/powerpc/mm/hugetlbpage-book3e.c | 2 | ||||
| -rw-r--r-- | arch/powerpc/mm/hugetlbpage.c | 4 |
2 files changed, 3 insertions, 3 deletions
diff --git a/arch/powerpc/mm/hugetlbpage-book3e.c b/arch/powerpc/mm/hugetlbpage-book3e.c index 1295b7c1cdac..343ad0b87261 100644 --- a/arch/powerpc/mm/hugetlbpage-book3e.c +++ b/arch/powerpc/mm/hugetlbpage-book3e.c | |||
| @@ -52,7 +52,7 @@ void book3e_hugetlb_preload(struct mm_struct *mm, unsigned long ea, pte_t pte) | |||
| 52 | if (unlikely(is_kernel_addr(ea))) | 52 | if (unlikely(is_kernel_addr(ea))) |
| 53 | return; | 53 | return; |
| 54 | 54 | ||
| 55 | #ifdef CONFIG_MM_SLICES | 55 | #ifdef CONFIG_PPC_MM_SLICES |
| 56 | psize = mmu_get_tsize(get_slice_psize(mm, ea)); | 56 | psize = mmu_get_tsize(get_slice_psize(mm, ea)); |
| 57 | tsize = mmu_get_psize(psize); | 57 | tsize = mmu_get_psize(psize); |
| 58 | shift = mmu_psize_defs[psize].shift; | 58 | shift = mmu_psize_defs[psize].shift; |
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c index 3a5f59dcbb33..48b65bedc04d 100644 --- a/arch/powerpc/mm/hugetlbpage.c +++ b/arch/powerpc/mm/hugetlbpage.c | |||
| @@ -690,7 +690,7 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr, | |||
| 690 | unsigned long len, unsigned long pgoff, | 690 | unsigned long len, unsigned long pgoff, |
| 691 | unsigned long flags) | 691 | unsigned long flags) |
| 692 | { | 692 | { |
| 693 | #ifdef CONFIG_MM_SLICES | 693 | #ifdef CONFIG_PPC_MM_SLICES |
| 694 | struct hstate *hstate = hstate_file(file); | 694 | struct hstate *hstate = hstate_file(file); |
| 695 | int mmu_psize = shift_to_mmu_psize(huge_page_shift(hstate)); | 695 | int mmu_psize = shift_to_mmu_psize(huge_page_shift(hstate)); |
| 696 | 696 | ||
| @@ -702,7 +702,7 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr, | |||
| 702 | 702 | ||
| 703 | unsigned long vma_mmu_pagesize(struct vm_area_struct *vma) | 703 | unsigned long vma_mmu_pagesize(struct vm_area_struct *vma) |
| 704 | { | 704 | { |
| 705 | #ifdef CONFIG_MM_SLICES | 705 | #ifdef CONFIG_PPC_MM_SLICES |
| 706 | unsigned int psize = get_slice_psize(vma->vm_mm, vma->vm_start); | 706 | unsigned int psize = get_slice_psize(vma->vm_mm, vma->vm_start); |
| 707 | 707 | ||
| 708 | return 1UL << mmu_psize_to_shift(psize); | 708 | return 1UL << mmu_psize_to_shift(psize); |
