Re: [PATCH] powerpc: Fix hugetlb with CONFIG_PPC_MM_SLICES=y
From: Becky Bruce <hidden>
Date: 2011-09-23 16:40:04
On Sep 21, 2011, at 12:58 AM, Paul Mackerras wrote:
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().
=20
This fixes it by changing the #ifdef to use CONFIG_PPC_MM_SLICES
in those functions and also in book3e_hugetlb_preload().
=20
Signed-off-by: Paul Mackerras <redacted>Paul, Ben, ACK since it looks like Ben has picked this up already..... but FYI I = have a different version of this fix in my tree. The = get_unmapped_area() shouldn't be there *at all* - we can just use the = generic code if we don't have slices. So instead the whole = hugetlb_get_unmapped_area function should be wrapped in PPC_MM_SLICES. = This is crufty debug stuff that I missed yanking out when I pushed the = patch, my apologies. I'll just submit a followup patch to fix this. Cheers, B
quoted hunk ↗ jump to hunk
--- arch/powerpc/mm/hugetlbpage-book3e.c | 2 +- arch/powerpc/mm/hugetlbpage.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) =20diff --git a/arch/powerpc/mm/hugetlbpage-book3e.c =
b/arch/powerpc/mm/hugetlbpage-book3e.c
quoted hunk ↗ jump to hunk
index 1295b7c..343ad0b 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)
quoted hunk ↗ jump to hunk
if (unlikely(is_kernel_addr(ea))) return; =20 -#ifdef CONFIG_MM_SLICES +#ifdef CONFIG_PPC_MM_SLICES psize =3D mmu_get_tsize(get_slice_psize(mm, ea)); tsize =3D mmu_get_psize(psize); shift =3D mmu_psize_defs[psize].shift;diff --git a/arch/powerpc/mm/hugetlbpage.c =
b/arch/powerpc/mm/hugetlbpage.c
quoted hunk ↗ jump to hunk
index 3a5f59d..48b65be 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,
unsigned long len, unsigned long =
pgoff,
quoted hunk ↗ jump to hunk
unsigned long flags) { -#ifdef CONFIG_MM_SLICES +#ifdef CONFIG_PPC_MM_SLICES struct hstate *hstate =3D hstate_file(file); int mmu_psize =3D shift_to_mmu_psize(huge_page_shift(hstate)); =20@@ -702,7 +702,7 @@ unsigned long hugetlb_get_unmapped_area(struct =
file *file, unsigned long addr,
=20
unsigned long vma_mmu_pagesize(struct vm_area_struct *vma)
{
-#ifdef CONFIG_MM_SLICES
+#ifdef CONFIG_PPC_MM_SLICES
unsigned int psize =3D get_slice_psize(vma->vm_mm, =vma->vm_start);
=20 return 1UL << mmu_psize_to_shift(psize); --=20 1.7.5.4