Message ID | 1455846943-32147-1-git-send-email-rashmicy@gmail.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
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 correct > > Expanding 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 > So, update the range of FORCE_MAX_ZONEORDER from 9-64 to 9-9. > > Signed-off-by: Rashmica Gupta <rashmicy@gmail.com> > --- > 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
On 19/02/16 15:08, Balbir Singh wrote: > > 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) I feel like someone more senior than me should weigh in on if this is worth doing... > MAX_ORDER -1 + 16 <= 24 for 64 K > > and > > MAX_ORDER -1 + 12 < = 24 for 4K > > Your calculations are correct >> Expanding 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 Yup, you are right! Might have had a brain spaz... >> So, update the range of FORCE_MAX_ZONEORDER from 9-64 to 9-9. >> >> Signed-off-by: Rashmica Gupta <rashmicy@gmail.com> >> --- >> 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? Agreed. >> default "9" if PPC64 && PPC_64K_PAGES >> range 13 64 if PPC64 && !PPC_64K_PAGES > Should this be fixed as well? > range 9 13? Agreed. >> default "13" if PPC64 && !PPC_64K_PAGES Should the default values remain as is, or follow the trend and be equal to the minimum value? > Please check my calculations > > Reviewed-by: Balbir Singh <bsingharora@gmail.com> > > Balbir Singh
On Friday 19 February 2016 12:55:43 Rashmica Gupta wrote: > > config FORCE_MAX_ZONEORDER > int "Maximum zone order" > - range 9 64 if PPC64 && PPC_64K_PAGES > + range 9 9 if PPC64 && PPC_64K_PAGES > default "9" if PPC64 && PPC_64K_PAGES > range 13 64 if PPC64 && !PPC_64K_PAGES > default "13" if PPC64 && !PPC_64K_PAGES > You can also use int "Maximum zone order" if !PPC_64K_PAGES which will hide the option in the case where no configuration is possible. Arnd
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 default "9" if PPC64 && PPC_64K_PAGES range 13 64 if PPC64 && !PPC_64K_PAGES default "13" if PPC64 && !PPC_64K_PAGES
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. Expanding 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. So, update the range of FORCE_MAX_ZONEORDER from 9-64 to 9-9. Signed-off-by: Rashmica Gupta <rashmicy@gmail.com> --- arch/powerpc/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)