Re: [PATCH] powerpc/Kconfig: Update config option based on page size.
From: Balbir Singh <bsingharora@gmail.com>
Date: 2016-02-19 04:08:27
On 19/02/16 12:55, Rashmica Gupta wrote:
Currently on PPC64 changing kernel pagesize from 4K to 64K leaves FORCE_MAX_ZONEORDER set to 13 - which produces a compile error. The error occurs because of the following constraint (from include/linux/mmzone.h) being violated: MAX_ORDER -1 + PAGESHIFT <= SECTION_SIZE_BITS.
IA64 has this cool hack
12 #ifdef CONFIG_FORCE_MAX_ZONEORDER
13 #if ((CONFIG_FORCE_MAX_ZONEORDER - 1 + PAGE_SHIFT) > SECTION_SIZE_BITS)
14 #undef SECTION_SIZE_BITS
15 #define SECTION_SIZE_BITS (CONFIG_FORCE_MAX_ZONEORDER - 1 + PAGE_SHIFT)
16 #endif
But coming back (we can revisit the SECTION_SIZE_BITS definition later)
MAX_ORDER -1 + 16 <= 24 for 64 K
and
MAX_ORDER -1 + 12 < = 24 for 4K
Your calculations are correctExpanding this out, we get: FORCE_MAX_ZONEBITS <= 25 - PAGESHIFT, which requires, for a 64K page, FORCE_MAX_ZONEBITS <= 9. Thus set max value of FORCE_MAX_ZONEORDER for 64K pages to 9. Also, check the minimum value: In include/linux/huge_mm.h, we have the constraint HPAGE_PMD_ORDER < MAX_ORDER which expands out to: PTE_INDEX_SIZE < FORCE_MAX_ZONEORDER.
PTE_INDEX_SIZE is: 9 (4k hash or no hash 4K pgtable) or 8 (64K hash or no hash 64K pgtable). Thus a min value of 9 for 64K pages is reasonable.
For 4K pages we end up with 9 < FORCE_MAX_ZONE_ORDER FORCE_MAX_ZONE_ORDER -1 + 12 < = 24 The range is 9 to 13 For 64K we end up with 8 < FORCE_MAX_ZONE_ORDER FORCE_MAX_ZONE_ORDER -1 + 16 <= 24 or FORCE_MAX_ZONE_ORDER <= 9 The range is really between 8 and 9 unless we tweak the SECTION_SIZE_BITS
quoted hunk ↗ jump to hunk
So, update the range of FORCE_MAX_ZONEORDER from 9-64 to 9-9. Signed-off-by: Rashmica Gupta <redacted> --- arch/powerpc/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index e4824fd04bb7..3bd3465b93ba 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig@@ -585,7 +585,7 @@ endchoice config FORCE_MAX_ZONEORDER int "Maximum zone order" - range 9 64 if PPC64 && PPC_64K_PAGES + range 9 9 if PPC64 && PPC_64K_PAGES
range 8 9?
default "9" if PPC64 && PPC_64K_PAGES range 13 64 if PPC64 && !PPC_64K_PAGES
Should this be fixed as well? range 9 13?
default "13" if PPC64 && !PPC_64K_PAGES
Please check my calculations Reviewed-by: Balbir Singh <bsingharora@gmail.com> Balbir Singh