[PATCH] powerpc/Kconfig: Update config option based on page size.

Subsystems: linux for powerpc (32-bit and 64-bit), the rest

STALE3819d

4 messages, 3 authors, 2016-02-19 · open the first message on its own page

[PATCH] powerpc/Kconfig: Update config option based on page size.

From: Rashmica Gupta <hidden>
Date: 2016-02-19 01:55:59

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 <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
 	default "9" if PPC64 && PPC_64K_PAGES
 	range 13 64 if PPC64 && !PPC_64K_PAGES
 	default "13" if PPC64 && !PPC_64K_PAGES
-- 
2.5.0

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 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
quoted 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

Re: [PATCH] powerpc/Kconfig: Update config option based on page size.

From: Rashmica <hidden>
Date: 2016-02-19 04:31:27


On 19/02/16 15:08, Balbir Singh wrote:
On 19/02/16 12:55, Rashmica Gupta wrote:
quoted
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
quoted
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...
quoted
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?
Agreed.
quoted
  	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.
quoted
  	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

Re: [PATCH] powerpc/Kconfig: Update config option based on page size.

From: Arnd Bergmann <arnd@arndb.de>
Date: 2016-02-19 08:15:11

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help