* [PATCH] powerpc: Fix hugetlb with CONFIG_PPC_MM_SLICES=y
@ 2011-09-21 5:58 Paul Mackerras
2011-09-23 16:39 ` Becky Bruce
0 siblings, 1 reply; 2+ messages in thread
From: Paul Mackerras @ 2011-09-21 5:58 UTC (permalink / raw)
To: linuxppc-dev
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>
---
arch/powerpc/mm/hugetlbpage-book3e.c | 2 +-
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 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)
if (unlikely(is_kernel_addr(ea)))
return;
-#ifdef CONFIG_MM_SLICES
+#ifdef CONFIG_PPC_MM_SLICES
psize = mmu_get_tsize(get_slice_psize(mm, ea));
tsize = mmu_get_psize(psize);
shift = mmu_psize_defs[psize].shift;
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
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,
unsigned long flags)
{
-#ifdef CONFIG_MM_SLICES
+#ifdef CONFIG_PPC_MM_SLICES
struct hstate *hstate = hstate_file(file);
int mmu_psize = shift_to_mmu_psize(huge_page_shift(hstate));
@@ -702,7 +702,7 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
unsigned long vma_mmu_pagesize(struct vm_area_struct *vma)
{
-#ifdef CONFIG_MM_SLICES
+#ifdef CONFIG_PPC_MM_SLICES
unsigned int psize = get_slice_psize(vma->vm_mm, vma->vm_start);
return 1UL << mmu_psize_to_shift(psize);
--
1.7.5.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] powerpc: Fix hugetlb with CONFIG_PPC_MM_SLICES=y
2011-09-21 5:58 [PATCH] powerpc: Fix hugetlb with CONFIG_PPC_MM_SLICES=y Paul Mackerras
@ 2011-09-23 16:39 ` Becky Bruce
0 siblings, 0 replies; 2+ messages in thread
From: Becky Bruce @ 2011-09-23 16:39 UTC (permalink / raw)
To: Paul Mackerras, Benjamin Herrenschmidt; +Cc: list linuxppc-dev
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 <paulus@samba.org>
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
> ---
> arch/powerpc/mm/hugetlbpage-book3e.c | 2 +-
> arch/powerpc/mm/hugetlbpage.c | 4 ++--
> 2 files changed, 3 insertions(+), 3 deletions(-)
>=20
> diff --git a/arch/powerpc/mm/hugetlbpage-book3e.c =
b/arch/powerpc/mm/hugetlbpage-book3e.c
> 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)
> 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
> 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,
> 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
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-09-23 16:40 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-09-21 5:58 [PATCH] powerpc: Fix hugetlb with CONFIG_PPC_MM_SLICES=y Paul Mackerras
2011-09-23 16:39 ` Becky Bruce
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).