Thread (4 messages) 4 messages, 3 authors, 2023-08-05

Re: [PATCH] powerpc/mm: Reinstate ARCH_FORCE_MAX_ORDER ranges

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2023-08-05 12:41:34
Also in: linux-mm
Subsystem: linux for powerpc (32-bit and 64-bit), the rest · Maintainers: Madhavan Srinivasan, Michael Ellerman, Linus Torvalds

Christophe Leroy [off-list ref] writes:
Le 19/05/2023 à 13:38, Michael Ellerman a écrit :
quoted
Commit 1e8fed873e74 ("powerpc: drop ranges for definition of
ARCH_FORCE_MAX_ORDER") removed the limits on the possible values for
ARCH_FORCE_MAX_ORDER.

However removing the ranges entirely causes some common work flows to
break. For example building a defconfig (which uses 64K pages), changing
the page size to 4K, and rebuilding used to work, because
ARCH_FORCE_MAX_ORDER would be clamped to 12 by the ranges.

With the ranges removed it creates a kernel that builds but crashes at
boot:
   kernel BUG at mm/huge_memory.c:470!
   Oops: Exception in kernel mode, sig: 5 [#1]
   ...
   NIP hugepage_init+0x9c/0x278
   LR  do_one_initcall+0x80/0x320
   Call Trace:
     do_one_initcall+0x80/0x320
     kernel_init_freeable+0x304/0x3ac
     kernel_init+0x30/0x1a0
     ret_from_kernel_user_thread+0x14/0x1c

The reasoning for removing the ranges was that some of the values were
too large. So take that into account and limit the maximums to 10 which
is the default max, except for the 4K case which uses 12.
There is something wrong:

~# echo 1 > /sys/kernel/mm/hugepages/hugepages-8192kB/nr_hugepages
sh: write error: Invalid argument

$ grep -e MAX_ORDER -e K_PAGES .config
CONFIG_PPC_4K_PAGES=y
# CONFIG_PPC_16K_PAGES is not set
CONFIG_ARCH_FORCE_MAX_ORDER=10
That's 32-bit I guess?

So you're hitting the default case, ie. range 10 10.

I see we have:

  arch/powerpc/configs/fsl-emb-nonhw.config:CONFIG_ARCH_FORCE_MAX_ORDER=12

And that config fragment is included by:
  mpc85xx_defconfig
  mpc85xx_smp_defconfig
  corenet32_smp_defconfig
  corenet64_smp_defconfig
  mpc86xx_defconfig
  mpc86xx_smp_defconfig

So for a lot of platforms the "default" was actually 12 in the past,
despite what it says in Kconfig.
In the past MAX_ORDER used to be 12 but now it is force to 10.
This should fix it?

cheers

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 0b1172cbeccb..b3fdb3d26836 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -917,7 +917,7 @@ config ARCH_FORCE_MAX_ORDER
 	default "6" if PPC32 && PPC_64K_PAGES
 	range 4 10 if PPC32 && PPC_256K_PAGES
 	default "4" if PPC32 && PPC_256K_PAGES
-	range 10 10
+	range 10 12
 	default "10"
 	help
 	  The kernel page allocator limits the size of maximal physically
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help