Thread (31 messages) flat view 31 messages, 5 authors, 2021-12-15

Re: [PATCH v6 15/18] powerpc/64s: Always define arch unmapped area calls

From: Nicholas Piggin <npiggin@gmail.com>
Date: 2021-12-09 08:30:34

Excerpts from Christophe Leroy's message of December 8, 2021 8:00 pm:

Le 01/12/2021 à 15:41, Nicholas Piggin a écrit :
quoted
To avoid any functional changes to radix paths when building with hash
MMU support disabled (and CONFIG_PPC_MM_SLICES=n), always define the
arch get_unmapped_area calls on 64s platforms.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
  arch/powerpc/include/asm/book3s/64/hash.h |  4 ---
  arch/powerpc/include/asm/book3s/64/mmu.h  |  6 ++++
  arch/powerpc/mm/hugetlbpage.c             | 16 ++++++---
  arch/powerpc/mm/mmap.c                    | 40 +++++++++++++++++++----
  arch/powerpc/mm/slice.c                   | 20 ------------
  5 files changed, 51 insertions(+), 35 deletions(-)
diff --git a/arch/powerpc/include/asm/book3s/64/hash.h b/arch/powerpc/include/asm/book3s/64/hash.h
index 674fe0e890dc..a7a0572f3846 100644
--- a/arch/powerpc/include/asm/book3s/64/hash.h
+++ b/arch/powerpc/include/asm/book3s/64/hash.h
@@ -99,10 +99,6 @@
   * Defines the address of the vmemap area, in its own region on
   * hash table CPUs.
   */
-#ifdef CONFIG_PPC_MM_SLICES
-#define HAVE_ARCH_UNMAPPED_AREA
-#define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN
-#endif /* CONFIG_PPC_MM_SLICES */
  
  /* PTEIDX nibble */
  #define _PTEIDX_SECONDARY	0x8
diff --git a/arch/powerpc/include/asm/book3s/64/mmu.h b/arch/powerpc/include/asm/book3s/64/mmu.h
index c02f42d1031e..015d7d972d16 100644
--- a/arch/powerpc/include/asm/book3s/64/mmu.h
+++ b/arch/powerpc/include/asm/book3s/64/mmu.h
@@ -4,6 +4,12 @@
  
  #include <asm/page.h>
  
+#ifdef CONFIG_HUGETLB_PAGE
+#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
+#endif
+#define HAVE_ARCH_UNMAPPED_AREA
+#define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN
+
  #ifndef __ASSEMBLY__
  /*
   * Page size definition
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
index 82d8b368ca6d..ddead41e2194 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
@@ -542,20 +542,26 @@ struct page *follow_huge_pd(struct vm_area_struct *vma,
  	return page;
  }
  
-#ifdef CONFIG_PPC_MM_SLICES
+#ifdef HAVE_ARCH_HUGETLB_UNMAPPED_AREA
Could use CONFIG_PPC_BOOK3S_64 instead
It was going to make it de-selectable with !HASH. I think your series 
cleans this stuff up so I dont' think it's a big deal.
quoted
+static inline int file_to_psize(struct file *file)
'inline' is not needed.
It is otherwise a !SLICES config causes it to give a defined but not 
used error.
quoted
+{
+	struct hstate *hstate = hstate_file(file);
+	return shift_to_mmu_psize(huge_page_shift(hstate));
+}
+
  unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
  					unsigned long len, unsigned long pgoff,
  					unsigned long flags)
  {
-	struct hstate *hstate = hstate_file(file);
-	int mmu_psize = shift_to_mmu_psize(huge_page_shift(hstate));
-
  #ifdef CONFIG_PPC_RADIX_MMU
  	if (radix_enabled())
  		return radix__hugetlb_get_unmapped_area(file, addr, len,
  						       pgoff, flags);
  #endif
-	return slice_get_unmapped_area(addr, len, flags, mmu_psize, 1);
+#ifdef CONFIG_PPC_MM_SLICES
+	return slice_get_unmapped_area(addr, len, flags, file_to_psize(file), 1);
+#endif
+	BUG();
  }
  #endif
  
diff --git a/arch/powerpc/mm/mmap.c b/arch/powerpc/mm/mmap.c
index ae683fdc716c..c475cf810aa8 100644
--- a/arch/powerpc/mm/mmap.c
+++ b/arch/powerpc/mm/mmap.c
@@ -80,6 +80,7 @@ static inline unsigned long mmap_base(unsigned long rnd,
  	return PAGE_ALIGN(DEFAULT_MAP_WINDOW - gap - rnd);
  }
  
+#ifdef HAVE_ARCH_UNMAPPED_AREA
Could use CONFIG_PPC_BOOK3S_64 instead. Or better, put all that stuff in 
a file in mm/book3s64/ directory
Seeing as you cleaned it up with your series, probably doesn't matter
much.

Thanks,
Nick
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help