diff mbox series

[2/4] MIPS: refactor virtual address size selection

Message ID 20190224071355.14488-3-wangxuerui@qiniu.com (mailing list archive)
State Changes Requested
Headers show
Series MIPS: support 47-bit userland VM space | expand

Commit Message

Wang Xuerui Feb. 24, 2019, 7:13 a.m. UTC
To facilitate future extensions of VA space, put all VA size selection
under a choice section, and add an entry corresponding to previous
default behavior.

Also, for sharing the implementation, rename the former MIPS_VA_BITS_48
symbol to MIPS_LARGE_VA, but re-use the name in the choice section for
config file compatibility.

Signed-off-by: Wang Xuerui <wangxuerui@qiniu.com>
Cc: Huacai Chen <chenhc@lemote.com>
Cc: Jiaxun Yang <jiaxun.yang@flygoat.com>
Cc: Alex Belits <alex.belits@cavium.com>
Cc: James Hogan <james.hogan@mips.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
---
 arch/mips/Kconfig                  | 28 ++++++++++++++++++++++++----
 arch/mips/include/asm/pgtable-64.h | 10 +++++-----
 arch/mips/include/asm/processor.h  |  2 +-
 3 files changed, 30 insertions(+), 10 deletions(-)

Comments

Paul Burton Feb. 25, 2019, 9:22 p.m. UTC | #1
Hi Wang,

Thanks for the patchset - overall it looks good, just a few comments
inline below.

On Sun, Feb 24, 2019 at 03:13:53PM +0800, Wang Xuerui wrote:
> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
> index a84c24d894aa..b0068a1e1e33 100644
> --- a/arch/mips/Kconfig
> +++ b/arch/mips/Kconfig
> @@ -2158,12 +2158,27 @@ config KVM_GUEST_TIMER_FREQ
>  	  emulation when determining guest CPU Frequency. Instead, the guest's
>  	  timer frequency is specified directly.
>  
> +choice
> +	prompt "Virtual address size"
> +	default MIPS_VA_BITS_DEFAULT

This whole choice ought to depend on 64BIT - it will have no effect for
MIPS32 kernels.

The prompt might be more accurate as "Maximum virtual address size".

> +
> +config MIPS_VA_BITS_DEFAULT

Can you rename this MIPS_VA_BITS_40?

> +	bool "40 bits or less virtual memory"
> +	help
> +	  This is the default setting on MIPS platforms since antiquity,
> +	  which gives 40 bits or less of virtual address space, depending on
> +	  the CPU.
> +
> +	  If unsure, say Y.
> +

Isn't it always 40 bits? The comment above the definition of TASK_SIZE64
in asm/processor.h suggests everything back to the R4000 can do 1TB (ie.
40 bit) VAs, and TACK_SIZE64 is unconditionally 1TB.

>  config MIPS_VA_BITS_48
>  	bool "48 bits virtual memory"
>  	depends on 64BIT

With the choice depending on 64BIT you can then drop the dependency
here.

> +	select MIPS_LARGE_VA
>  	help
>  	  Support a maximum at least 48 bits of application virtual
> -	  memory.  Default is 40 bits or less, depending on the CPU.
> +	  memory.
> +

I don't think there's any need to describe the default again here so
would drop this change.

>  	  For page sizes 16k and above, this option results in a small
>  	  memory overhead for page tables.  For 4k page size, a fourth
>  	  level of page tables is added which imposes both a memory
> @@ -2171,6 +2186,11 @@ config MIPS_VA_BITS_48
>  
>  	  If unsure, say N.
>  
> +endchoice
> +
> +config MIPS_LARGE_VA
> +	bool
> +
>  choice
>  	prompt "Kernel page size"
>  	default PAGE_SIZE_4KB
> @@ -2187,7 +2207,7 @@ config PAGE_SIZE_4KB
>  config PAGE_SIZE_8KB
>  	bool "8kB"
>  	depends on CPU_R8000 || CPU_CAVIUM_OCTEON
> -	depends on !MIPS_VA_BITS_48
> +	depends on !MIPS_LARGE_VA

I think it would be cleaner to introduce the MIPS_VA_BITS entry you add
in the next patch here instead, and make this:

	depends on (MIPS_VA_BITS <= 40) if 64BIT

Or maybe even give MIPS_VA_BITS values for 32BIT kernels so you can drop
the "if 64BIT" part, eg:

	default 30 if 32BIT && KVM_GUEST
	default 31 if 32BIT

With that & similar changes to other uses of MIPS_LARGE_VA we won't need
MIPS_LARGE_VA at all, and dependencies will be more explicit about the
range of VA sizes they actually care about.

Thanks,
    Paul
diff mbox series

Patch

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index a84c24d894aa..b0068a1e1e33 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -2158,12 +2158,27 @@  config KVM_GUEST_TIMER_FREQ
 	  emulation when determining guest CPU Frequency. Instead, the guest's
 	  timer frequency is specified directly.
 
+choice
+	prompt "Virtual address size"
+	default MIPS_VA_BITS_DEFAULT
+
+config MIPS_VA_BITS_DEFAULT
+	bool "40 bits or less virtual memory"
+	help
+	  This is the default setting on MIPS platforms since antiquity,
+	  which gives 40 bits or less of virtual address space, depending on
+	  the CPU.
+
+	  If unsure, say Y.
+
 config MIPS_VA_BITS_48
 	bool "48 bits virtual memory"
 	depends on 64BIT
+	select MIPS_LARGE_VA
 	help
 	  Support a maximum at least 48 bits of application virtual
-	  memory.  Default is 40 bits or less, depending on the CPU.
+	  memory.
+
 	  For page sizes 16k and above, this option results in a small
 	  memory overhead for page tables.  For 4k page size, a fourth
 	  level of page tables is added which imposes both a memory
@@ -2171,6 +2186,11 @@  config MIPS_VA_BITS_48
 
 	  If unsure, say N.
 
+endchoice
+
+config MIPS_LARGE_VA
+	bool
+
 choice
 	prompt "Kernel page size"
 	default PAGE_SIZE_4KB
@@ -2187,7 +2207,7 @@  config PAGE_SIZE_4KB
 config PAGE_SIZE_8KB
 	bool "8kB"
 	depends on CPU_R8000 || CPU_CAVIUM_OCTEON
-	depends on !MIPS_VA_BITS_48
+	depends on !MIPS_LARGE_VA
 	help
 	  Using 8kB page size will result in higher performance kernel at
 	  the price of higher memory consumption.  This option is available
@@ -2206,7 +2226,7 @@  config PAGE_SIZE_16KB
 config PAGE_SIZE_32KB
 	bool "32kB"
 	depends on CPU_CAVIUM_OCTEON
-	depends on !MIPS_VA_BITS_48
+	depends on !MIPS_LARGE_VA
 	help
 	  Using 32kB page size will result in higher performance kernel at
 	  the price of higher memory consumption.  This option is available
@@ -3070,7 +3090,7 @@  config HAVE_LATENCYTOP_SUPPORT
 
 config PGTABLE_LEVELS
 	int
-	default 4 if PAGE_SIZE_4KB && MIPS_VA_BITS_48
+	default 4 if PAGE_SIZE_4KB && MIPS_LARGE_VA
 	default 3 if 64BIT && !PAGE_SIZE_64KB
 	default 2
 
diff --git a/arch/mips/include/asm/pgtable-64.h b/arch/mips/include/asm/pgtable-64.h
index 93a9dce31f25..77a71be71b51 100644
--- a/arch/mips/include/asm/pgtable-64.h
+++ b/arch/mips/include/asm/pgtable-64.h
@@ -18,9 +18,9 @@ 
 #include <asm/fixmap.h>
 
 #define __ARCH_USE_5LEVEL_HACK
-#if defined(CONFIG_PAGE_SIZE_64KB) && !defined(CONFIG_MIPS_VA_BITS_48)
+#if defined(CONFIG_PAGE_SIZE_64KB) && !defined(CONFIG_MIPS_LARGE_VA)
 #include <asm-generic/pgtable-nopmd.h>
-#elif !(defined(CONFIG_PAGE_SIZE_4KB) && defined(CONFIG_MIPS_VA_BITS_48))
+#elif !(defined(CONFIG_PAGE_SIZE_4KB) && defined(CONFIG_MIPS_LARGE_VA))
 #include <asm-generic/pgtable-nopud.h>
 #endif
 
@@ -83,7 +83,7 @@ 
  * of virtual address space.
  */
 #ifdef CONFIG_PAGE_SIZE_4KB
-# ifdef CONFIG_MIPS_VA_BITS_48
+# ifdef CONFIG_MIPS_LARGE_VA
 #  define PGD_ORDER		0
 #  define PUD_ORDER		0
 # else
@@ -100,7 +100,7 @@ 
 #define PTE_ORDER		0
 #endif
 #ifdef CONFIG_PAGE_SIZE_16KB
-#ifdef CONFIG_MIPS_VA_BITS_48
+#ifdef CONFIG_MIPS_LARGE_VA
 #define PGD_ORDER               1
 #else
 #define PGD_ORDER               0
@@ -118,7 +118,7 @@ 
 #ifdef CONFIG_PAGE_SIZE_64KB
 #define PGD_ORDER		0
 #define PUD_ORDER		aieeee_attempt_to_allocate_pud
-#ifdef CONFIG_MIPS_VA_BITS_48
+#ifdef CONFIG_MIPS_LARGE_VA
 #define PMD_ORDER		0
 #else
 #define PMD_ORDER		aieeee_attempt_to_allocate_pmd
diff --git a/arch/mips/include/asm/processor.h b/arch/mips/include/asm/processor.h
index c50cba85d145..226cf46cc89c 100644
--- a/arch/mips/include/asm/processor.h
+++ b/arch/mips/include/asm/processor.h
@@ -62,7 +62,7 @@  extern unsigned int vced_count, vcei_count;
  * 8192EB ...
  */
 #define TASK_SIZE32	0x7fff8000UL
-#ifdef CONFIG_MIPS_VA_BITS_48
+#ifdef CONFIG_MIPS_LARGE_VA
 #define TASK_SIZE64     (0x1UL << min(cpu_data[0].vmbits, 48))
 #else
 #define TASK_SIZE64     0x10000000000UL