* [RFC v1 1/4] x86: mm: use IS_ENABLED() for direct_gbpages
2015-03-05 1:24 [RFC v1 0/4] x86: simpify direct_gbpages setting, add early_param_on_off() Luis R. Rodriguez
@ 2015-03-05 1:24 ` Luis R. Rodriguez
2015-03-05 11:49 ` [tip:x86/mm] x86/mm: Use " tip-bot for Luis R. Rodriguez
2015-03-05 1:24 ` [RFC v1 2/4] x86: mm: simplify enabling direct_gbpages Luis R. Rodriguez
` (6 subsequent siblings)
7 siblings, 1 reply; 19+ messages in thread
From: Luis R. Rodriguez @ 2015-03-05 1:24 UTC (permalink / raw)
To: gregkh, akpm, tony, tglx, mingo, hpa, jgross, luto, toshi.kani,
dave.hansen, JBeulich, pavel, qiuxishi, david.vrabel, bp, vbabka,
iamjoonsoo.kim, decui
Cc: linux-kernel, x86, julia.lawall, Luis R. Rodriguez
From: "Luis R. Rodriguez" <mcgrof@suse.com>
Replace #ifdef eyesore with IS_ENABLED() use.
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Tony Lindgren <tony@atomide.com>
Cc: linux-kernel@vger.kernel.org
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: x86@kernel.org
Cc: Juergen Gross <jgross@suse.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Jan Beulich <JBeulich@suse.com>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Dexuan Cui <decui@microsoft.com>
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
---
arch/x86/mm/init.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 52417e7..b880d06 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -131,11 +131,7 @@ void __init early_alloc_pgt_buf(void)
int after_bootmem;
-int direct_gbpages
-#ifdef CONFIG_DIRECT_GBPAGES
- = 1
-#endif
-;
+int direct_gbpages = IS_ENABLED(CONFIG_DIRECT_GBPAGES);
static void __init init_gbpages(void)
{
--
2.2.2
^ permalink raw reply related [flat|nested] 19+ messages in thread* [tip:x86/mm] x86/mm: Use IS_ENABLED() for direct_gbpages
2015-03-05 1:24 ` [RFC v1 1/4] x86: mm: use IS_ENABLED() for direct_gbpages Luis R. Rodriguez
@ 2015-03-05 11:49 ` tip-bot for Luis R. Rodriguez
0 siblings, 0 replies; 19+ messages in thread
From: tip-bot for Luis R. Rodriguez @ 2015-03-05 11:49 UTC (permalink / raw)
To: linux-tip-commits
Cc: JBeulich, hpa, toshi.kani, david.vrabel, tony, pavel, dave.hansen,
bp, bp, vbabka, luto, gregkh, iamjoonsoo.kim, linux-kernel, tglx,
mcgrof, torvalds, jgross, decui, akpm, mingo, qiuxishi
Commit-ID: d9fd579c218e22c897f0f1b9e132af9b436cf445
Gitweb: http://git.kernel.org/tip/d9fd579c218e22c897f0f1b9e132af9b436cf445
Author: Luis R. Rodriguez <mcgrof@suse.com>
AuthorDate: Wed, 4 Mar 2015 17:24:11 -0800
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 5 Mar 2015 08:02:11 +0100
x86/mm: Use IS_ENABLED() for direct_gbpages
Replace #ifdef eyesore with IS_ENABLED() use.
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Borislav Petkov <bp@suse.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Dexuan Cui <decui@microsoft.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: JBeulich@suse.com
Cc: Jan Beulich <JBeulich@suse.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Cc: julia.lawall@lip6.fr
Link: http://lkml.kernel.org/r/1425518654-3403-2-git-send-email-mcgrof@do-not-panic.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/mm/init.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index a110efc..74f2b37 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -131,11 +131,7 @@ void __init early_alloc_pgt_buf(void)
int after_bootmem;
-int direct_gbpages
-#ifdef CONFIG_DIRECT_GBPAGES
- = 1
-#endif
-;
+int direct_gbpages = IS_ENABLED(CONFIG_DIRECT_GBPAGES);
static void __init init_gbpages(void)
{
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [RFC v1 2/4] x86: mm: simplify enabling direct_gbpages
2015-03-05 1:24 [RFC v1 0/4] x86: simpify direct_gbpages setting, add early_param_on_off() Luis R. Rodriguez
2015-03-05 1:24 ` [RFC v1 1/4] x86: mm: use IS_ENABLED() for direct_gbpages Luis R. Rodriguez
@ 2015-03-05 1:24 ` Luis R. Rodriguez
2015-03-05 11:49 ` [tip:x86/mm] x86/mm: Simplify " tip-bot for Luis R. Rodriguez
2015-03-05 1:24 ` [RFC v1 3/4] init.h: add early_param_on_off() Luis R. Rodriguez
` (5 subsequent siblings)
7 siblings, 1 reply; 19+ messages in thread
From: Luis R. Rodriguez @ 2015-03-05 1:24 UTC (permalink / raw)
To: gregkh, akpm, tony, tglx, mingo, hpa, jgross, luto, toshi.kani,
dave.hansen, JBeulich, pavel, qiuxishi, david.vrabel, bp, vbabka,
iamjoonsoo.kim, decui
Cc: linux-kernel, x86, julia.lawall, Luis R. Rodriguez
From: "Luis R. Rodriguez" <mcgrof@suse.com>
direct_gbpages can be force enabled as an early parameter
but not really have taken effect when DEBUG_PAGEALLOC
or KMEMCHECK is enabled. You can also enable direct_gbpages
right now if you have an x86_64 architecture but your CPU
doesn't really have support for this feature. In both cases
PG_LEVEL_1G won't actually be enabled but direct_gbpages is used
in other areas under the assumptions that PG_LEVEL_1G
was set. Fix this by putting together all requirements
which make this feature sensible to enable under, and only
enable both finally flipping on PG_LEVEL_1G and leaving
PG_LEVEL_1G set when this is true.
We only enable this feature then to be possible on sensible
builds defined by the new ENABLE_DIRECT_GBPAGES. If the
CPU has support for it you can either enable this by using
the DIRECT_GBPAGES option or using the early kernel parameter.
If a platform had support for this you can always force disable
it as well.
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Tony Lindgren <tony@atomide.com>
Cc: linux-kernel@vger.kernel.org
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: x86@kernel.org
Cc: Juergen Gross <jgross@suse.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Jan Beulich <JBeulich@suse.com>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Dexuan Cui <decui@microsoft.com>
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
---
arch/x86/Kconfig | 18 +++++++++++++-----
arch/x86/mm/init.c | 17 +++++++++--------
arch/x86/mm/pageattr.c | 2 --
3 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index fb8e8cd..f3fd260 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1300,14 +1300,22 @@ config ARCH_DMA_ADDR_T_64BIT
def_bool y
depends on X86_64 || HIGHMEM64G
+config ENABLE_DIRECT_GBPAGES
+ def_bool y
+ depends on X86_64 && !DEBUG_PAGEALLOC && !KMEMCHECK
+
config DIRECT_GBPAGES
bool "Enable 1GB pages for kernel pagetables" if EXPERT
default y
- depends on X86_64
- ---help---
- Allow the kernel linear mapping to use 1GB pages on CPUs that
- support it. This can improve the kernel's performance a tiny bit by
- reducing TLB pressure. If in doubt, say "Y".
+ depends on ENABLE_DIRECT_GBPAGES
+ ---help---
+ Enable by default the kernel linear mapping to use 1GB pages on CPUs
+ that support it. This can improve the kernel's performance a tiny bit
+ by reducing TLB pressure. If in doubt, say "Y". If you've disabled
+ option but your platform is capable of handling support for this
+ you can use the gbpages kernel parameter. Likewise if you've enabled
+ this but you'd like to force disable this option you can use the
+ nogbpages kernel parameter.
# Common NUMA Features
config NUMA
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index b880d06..8d375ba 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -131,16 +131,21 @@ void __init early_alloc_pgt_buf(void)
int after_bootmem;
+static int page_size_mask;
+
int direct_gbpages = IS_ENABLED(CONFIG_DIRECT_GBPAGES);
static void __init init_gbpages(void)
{
-#ifdef CONFIG_X86_64
- if (direct_gbpages && cpu_has_gbpages)
+ if (!IS_ENABLED(CONFIG_ENABLE_DIRECT_GBPAGES)) {
+ direct_gbpages = 0;
+ return;
+ }
+ if (direct_gbpages && cpu_has_gbpages) {
printk(KERN_INFO "Using GB pages for direct mapping\n");
- else
+ page_size_mask |= 1 << PG_LEVEL_1G;
+ } else
direct_gbpages = 0;
-#endif
}
struct map_range {
@@ -149,8 +154,6 @@ struct map_range {
unsigned page_size_mask;
};
-static int page_size_mask;
-
static void __init probe_page_size_mask(void)
{
init_gbpages();
@@ -161,8 +164,6 @@ static void __init probe_page_size_mask(void)
* This will simplify cpa(), which otherwise needs to support splitting
* large pages into small in interrupt context, etc.
*/
- if (direct_gbpages)
- page_size_mask |= 1 << PG_LEVEL_1G;
if (cpu_has_pse)
page_size_mask |= 1 << PG_LEVEL_2M;
#endif
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index 536ea2f..070b7c2 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -81,11 +81,9 @@ void arch_report_meminfo(struct seq_file *m)
seq_printf(m, "DirectMap4M: %8lu kB\n",
direct_pages_count[PG_LEVEL_2M] << 12);
#endif
-#ifdef CONFIG_X86_64
if (direct_gbpages)
seq_printf(m, "DirectMap1G: %8lu kB\n",
direct_pages_count[PG_LEVEL_1G] << 20);
-#endif
}
#else
static inline void split_page_count(int level) { }
--
2.2.2
^ permalink raw reply related [flat|nested] 19+ messages in thread* [tip:x86/mm] x86/mm: Simplify enabling direct_gbpages
2015-03-05 1:24 ` [RFC v1 2/4] x86: mm: simplify enabling direct_gbpages Luis R. Rodriguez
@ 2015-03-05 11:49 ` tip-bot for Luis R. Rodriguez
0 siblings, 0 replies; 19+ messages in thread
From: tip-bot for Luis R. Rodriguez @ 2015-03-05 11:49 UTC (permalink / raw)
To: linux-tip-commits
Cc: hpa, gregkh, toshi.kani, mingo, akpm, qiuxishi, bp, vbabka,
iamjoonsoo.kim, JBeulich, linux-kernel, decui, tony, dave.hansen,
mcgrof, jgross, tglx, bp, torvalds, pavel, luto, david.vrabel
Commit-ID: e5008abe929c160d36e44b8c2b644d4330d2e389
Gitweb: http://git.kernel.org/tip/e5008abe929c160d36e44b8c2b644d4330d2e389
Author: Luis R. Rodriguez <mcgrof@suse.com>
AuthorDate: Wed, 4 Mar 2015 17:24:12 -0800
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 5 Mar 2015 08:02:12 +0100
x86/mm: Simplify enabling direct_gbpages
direct_gbpages can be force enabled as an early parameter
but not really have taken effect when DEBUG_PAGEALLOC
or KMEMCHECK is enabled. You can also enable direct_gbpages
right now if you have an x86_64 architecture but your CPU
doesn't really have support for this feature. In both cases
PG_LEVEL_1G won't actually be enabled but direct_gbpages is used
in other areas under the assumptions that PG_LEVEL_1G
was set. Fix this by putting together all requirements
which make this feature sensible to enable under, and only
enable both finally flipping on PG_LEVEL_1G and leaving
PG_LEVEL_1G set when this is true.
We only enable this feature then to be possible on sensible
builds defined by the new ENABLE_DIRECT_GBPAGES. If the
CPU has support for it you can either enable this by using
the DIRECT_GBPAGES option or using the early kernel parameter.
If a platform had support for this you can always force disable
it as well.
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Borislav Petkov <bp@suse.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Dexuan Cui <decui@microsoft.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: JBeulich@suse.com
Cc: Jan Beulich <JBeulich@suse.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Cc: julia.lawall@lip6.fr
Link: http://lkml.kernel.org/r/1425518654-3403-3-git-send-email-mcgrof@do-not-panic.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/Kconfig | 18 +++++++++++++-----
arch/x86/mm/init.c | 17 +++++++++--------
arch/x86/mm/pageattr.c | 2 --
3 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index c2fb8a8..4d06e1c 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1299,14 +1299,22 @@ config ARCH_DMA_ADDR_T_64BIT
def_bool y
depends on X86_64 || HIGHMEM64G
+config ENABLE_DIRECT_GBPAGES
+ def_bool y
+ depends on X86_64 && !DEBUG_PAGEALLOC && !KMEMCHECK
+
config DIRECT_GBPAGES
bool "Enable 1GB pages for kernel pagetables" if EXPERT
default y
- depends on X86_64
- ---help---
- Allow the kernel linear mapping to use 1GB pages on CPUs that
- support it. This can improve the kernel's performance a tiny bit by
- reducing TLB pressure. If in doubt, say "Y".
+ depends on ENABLE_DIRECT_GBPAGES
+ ---help---
+ Enable by default the kernel linear mapping to use 1GB pages on CPUs
+ that support it. This can improve the kernel's performance a tiny bit
+ by reducing TLB pressure. If in doubt, say "Y". If you've disabled
+ option but your platform is capable of handling support for this
+ you can use the gbpages kernel parameter. Likewise if you've enabled
+ this but you'd like to force disable this option you can use the
+ nogbpages kernel parameter.
# Common NUMA Features
config NUMA
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 74f2b37..2ce2c8e 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -131,16 +131,21 @@ void __init early_alloc_pgt_buf(void)
int after_bootmem;
+static int page_size_mask;
+
int direct_gbpages = IS_ENABLED(CONFIG_DIRECT_GBPAGES);
static void __init init_gbpages(void)
{
-#ifdef CONFIG_X86_64
- if (direct_gbpages && cpu_has_gbpages)
+ if (!IS_ENABLED(CONFIG_ENABLE_DIRECT_GBPAGES)) {
+ direct_gbpages = 0;
+ return;
+ }
+ if (direct_gbpages && cpu_has_gbpages) {
printk(KERN_INFO "Using GB pages for direct mapping\n");
- else
+ page_size_mask |= 1 << PG_LEVEL_1G;
+ } else
direct_gbpages = 0;
-#endif
}
struct map_range {
@@ -149,8 +154,6 @@ struct map_range {
unsigned page_size_mask;
};
-static int page_size_mask;
-
static void __init probe_page_size_mask(void)
{
init_gbpages();
@@ -161,8 +164,6 @@ static void __init probe_page_size_mask(void)
* This will simplify cpa(), which otherwise needs to support splitting
* large pages into small in interrupt context, etc.
*/
- if (direct_gbpages)
- page_size_mask |= 1 << PG_LEVEL_1G;
if (cpu_has_pse)
page_size_mask |= 1 << PG_LEVEL_2M;
#endif
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index 81e8282..89af288 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -81,11 +81,9 @@ void arch_report_meminfo(struct seq_file *m)
seq_printf(m, "DirectMap4M: %8lu kB\n",
direct_pages_count[PG_LEVEL_2M] << 12);
#endif
-#ifdef CONFIG_X86_64
if (direct_gbpages)
seq_printf(m, "DirectMap1G: %8lu kB\n",
direct_pages_count[PG_LEVEL_1G] << 20);
-#endif
}
#else
static inline void split_page_count(int level) { }
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [RFC v1 3/4] init.h: add early_param_on_off()
2015-03-05 1:24 [RFC v1 0/4] x86: simpify direct_gbpages setting, add early_param_on_off() Luis R. Rodriguez
2015-03-05 1:24 ` [RFC v1 1/4] x86: mm: use IS_ENABLED() for direct_gbpages Luis R. Rodriguez
2015-03-05 1:24 ` [RFC v1 2/4] x86: mm: simplify enabling direct_gbpages Luis R. Rodriguez
@ 2015-03-05 1:24 ` Luis R. Rodriguez
2015-03-05 11:50 ` [tip:x86/mm] init.h: Add early_param_on_off() tip-bot for Luis R. Rodriguez
2015-03-05 1:24 ` [RFC v1 4/4] x86: mm: use early_param_on_off() for direct_gbpages Luis R. Rodriguez
` (4 subsequent siblings)
7 siblings, 1 reply; 19+ messages in thread
From: Luis R. Rodriguez @ 2015-03-05 1:24 UTC (permalink / raw)
To: gregkh, akpm, tony, tglx, mingo, hpa, jgross, luto, toshi.kani,
dave.hansen, JBeulich, pavel, qiuxishi, david.vrabel, bp, vbabka,
iamjoonsoo.kim, decui
Cc: linux-kernel, x86, julia.lawall, Luis R. Rodriguez
From: "Luis R. Rodriguez" <mcgrof@suse.com>
At times all you need is a kconfig variable to enable a feature,
by default but you may want to also enable / disable it through
a kernel parameter. In such cases the parameter routines to turn
the thing on / off are really simple. Just use a wrapper for
this, it lets us generalize the code and makes it easier to
associate parameters with related kernel configuration options.
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Tony Lindgren <tony@atomide.com>
Cc: linux-kernel@vger.kernel.org
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: x86@kernel.org
Cc: Juergen Gross <jgross@suse.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Jan Beulich <JBeulich@suse.com>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Dexuan Cui <decui@microsoft.com>
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
---
include/linux/init.h | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/include/linux/init.h b/include/linux/init.h
index 2df8e8d..bc11ff9 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -268,6 +268,21 @@ struct obs_kernel_param {
#define early_param(str, fn) \
__setup_param(str, fn, fn, 1)
+#define early_param_on_off(str_on, str_off, var, config) \
+ int var = IS_ENABLED(config); \
+ static int __init parse_##var##_on(char *arg) \
+ { \
+ var = 1; \
+ return 0; \
+ } \
+ static int __init parse_##var##_off(char *arg) \
+ { \
+ var = 0; \
+ return 0; \
+ } \
+ __setup_param(str_on, parse_##var##_on, parse_##var##_on, 1); \
+ __setup_param(str_off, parse_##var##_off, parse_##var##_off, 1)
+
/* Relies on boot_command_line being set */
void __init parse_early_param(void);
void __init parse_early_options(char *cmdline);
--
2.2.2
^ permalink raw reply related [flat|nested] 19+ messages in thread* [tip:x86/mm] init.h: Add early_param_on_off()
2015-03-05 1:24 ` [RFC v1 3/4] init.h: add early_param_on_off() Luis R. Rodriguez
@ 2015-03-05 11:50 ` tip-bot for Luis R. Rodriguez
0 siblings, 0 replies; 19+ messages in thread
From: tip-bot for Luis R. Rodriguez @ 2015-03-05 11:50 UTC (permalink / raw)
To: linux-tip-commits
Cc: mingo, david.vrabel, iamjoonsoo.kim, linux-kernel, vbabka, bp,
torvalds, JBeulich, jgross, tony, mcgrof, tglx, bp, qiuxishi,
gregkh, dave.hansen, luto, hpa, akpm, decui, pavel, toshi.kani
Commit-ID: bfb33bad83f650f265ed65cbfe8352b7c3ce8c76
Gitweb: http://git.kernel.org/tip/bfb33bad83f650f265ed65cbfe8352b7c3ce8c76
Author: Luis R. Rodriguez <mcgrof@suse.com>
AuthorDate: Wed, 4 Mar 2015 17:24:13 -0800
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 5 Mar 2015 08:02:12 +0100
init.h: Add early_param_on_off()
At times all you need is a kconfig variable to enable a feature,
by default but you may want to also enable / disable it through
a kernel parameter. In such cases the parameter routines to turn
the thing on / off are really simple. Just use a wrapper for
this, it lets us generalize the code and makes it easier to
associate parameters with related kernel configuration options.
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Borislav Petkov <bp@suse.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Dexuan Cui <decui@microsoft.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: JBeulich@suse.com
Cc: Jan Beulich <JBeulich@suse.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Cc: julia.lawall@lip6.fr
Link: http://lkml.kernel.org/r/1425518654-3403-4-git-send-email-mcgrof@do-not-panic.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
include/linux/init.h | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/include/linux/init.h b/include/linux/init.h
index 2df8e8d..bc11ff9 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -268,6 +268,21 @@ struct obs_kernel_param {
#define early_param(str, fn) \
__setup_param(str, fn, fn, 1)
+#define early_param_on_off(str_on, str_off, var, config) \
+ int var = IS_ENABLED(config); \
+ static int __init parse_##var##_on(char *arg) \
+ { \
+ var = 1; \
+ return 0; \
+ } \
+ static int __init parse_##var##_off(char *arg) \
+ { \
+ var = 0; \
+ return 0; \
+ } \
+ __setup_param(str_on, parse_##var##_on, parse_##var##_on, 1); \
+ __setup_param(str_off, parse_##var##_off, parse_##var##_off, 1)
+
/* Relies on boot_command_line being set */
void __init parse_early_param(void);
void __init parse_early_options(char *cmdline);
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [RFC v1 4/4] x86: mm: use early_param_on_off() for direct_gbpages
2015-03-05 1:24 [RFC v1 0/4] x86: simpify direct_gbpages setting, add early_param_on_off() Luis R. Rodriguez
` (2 preceding siblings ...)
2015-03-05 1:24 ` [RFC v1 3/4] init.h: add early_param_on_off() Luis R. Rodriguez
@ 2015-03-05 1:24 ` Luis R. Rodriguez
2015-03-05 11:50 ` [tip:x86/mm] x86/mm: Use " tip-bot for Luis R. Rodriguez
2015-03-05 7:23 ` [PATCH 5/4] x86/mm: Further simplify 1 GB kernel linear mappings handling Ingo Molnar
` (3 subsequent siblings)
7 siblings, 1 reply; 19+ messages in thread
From: Luis R. Rodriguez @ 2015-03-05 1:24 UTC (permalink / raw)
To: gregkh, akpm, tony, tglx, mingo, hpa, jgross, luto, toshi.kani,
dave.hansen, JBeulich, pavel, qiuxishi, david.vrabel, bp, vbabka,
iamjoonsoo.kim, decui
Cc: linux-kernel, x86, julia.lawall, Luis R. Rodriguez
From: "Luis R. Rodriguez" <mcgrof@suse.com>
The enabler / disabler is pretty simple, just use the
provided wrappers, this lets us easily relate the variable
to the associated Kconfig entry.
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Tony Lindgren <tony@atomide.com>
Cc: linux-kernel@vger.kernel.org
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: x86@kernel.org
Cc: Juergen Gross <jgross@suse.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Jan Beulich <JBeulich@suse.com>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Dexuan Cui <decui@microsoft.com>
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
---
arch/x86/mm/init.c | 3 ++-
arch/x86/mm/init_64.c | 14 --------------
2 files changed, 2 insertions(+), 15 deletions(-)
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 8d375ba..ce5db80 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -133,7 +133,8 @@ int after_bootmem;
static int page_size_mask;
-int direct_gbpages = IS_ENABLED(CONFIG_DIRECT_GBPAGES);
+early_param_on_off("gbpages", "nogbpages",
+ direct_gbpages, CONFIG_DIRECT_GBPAGES);
static void __init init_gbpages(void)
{
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 30eb05a..3fba623 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -130,20 +130,6 @@ int kernel_ident_mapping_init(struct x86_mapping_info *info, pgd_t *pgd_page,
return 0;
}
-static int __init parse_direct_gbpages_off(char *arg)
-{
- direct_gbpages = 0;
- return 0;
-}
-early_param("nogbpages", parse_direct_gbpages_off);
-
-static int __init parse_direct_gbpages_on(char *arg)
-{
- direct_gbpages = 1;
- return 0;
-}
-early_param("gbpages", parse_direct_gbpages_on);
-
/*
* NOTE: pagetable_init alloc all the fixmap pagetables contiguous on the
* physical space so we can cache the place of the first one and move
--
2.2.2
^ permalink raw reply related [flat|nested] 19+ messages in thread* [tip:x86/mm] x86/mm: Use early_param_on_off() for direct_gbpages
2015-03-05 1:24 ` [RFC v1 4/4] x86: mm: use early_param_on_off() for direct_gbpages Luis R. Rodriguez
@ 2015-03-05 11:50 ` tip-bot for Luis R. Rodriguez
0 siblings, 0 replies; 19+ messages in thread
From: tip-bot for Luis R. Rodriguez @ 2015-03-05 11:50 UTC (permalink / raw)
To: linux-tip-commits
Cc: tony, JBeulich, gregkh, decui, toshi.kani, david.vrabel, pavel,
bp, luto, iamjoonsoo.kim, linux-kernel, mingo, qiuxishi, bp,
vbabka, akpm, hpa, jgross, dave.hansen, mcgrof, torvalds, tglx
Commit-ID: 73c8c861dc5bddf1b24c6aeffee2292c96cf8db2
Gitweb: http://git.kernel.org/tip/73c8c861dc5bddf1b24c6aeffee2292c96cf8db2
Author: Luis R. Rodriguez <mcgrof@suse.com>
AuthorDate: Wed, 4 Mar 2015 17:24:14 -0800
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 5 Mar 2015 08:02:12 +0100
x86/mm: Use early_param_on_off() for direct_gbpages
The enabler / disabler is pretty simple, just use the
provided wrappers, this lets us easily relate the variable
to the associated Kconfig entry.
Signed-off-by: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Borislav Petkov <bp@suse.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Dexuan Cui <decui@microsoft.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: JBeulich@suse.com
Cc: Jan Beulich <JBeulich@suse.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Cc: julia.lawall@lip6.fr
Link: http://lkml.kernel.org/r/1425518654-3403-5-git-send-email-mcgrof@do-not-panic.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/mm/init.c | 3 ++-
arch/x86/mm/init_64.c | 14 --------------
2 files changed, 2 insertions(+), 15 deletions(-)
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 2ce2c8e..c35ba8b 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -133,7 +133,8 @@ int after_bootmem;
static int page_size_mask;
-int direct_gbpages = IS_ENABLED(CONFIG_DIRECT_GBPAGES);
+early_param_on_off("gbpages", "nogbpages",
+ direct_gbpages, CONFIG_DIRECT_GBPAGES);
static void __init init_gbpages(void)
{
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 30eb05a..3fba623 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -130,20 +130,6 @@ int kernel_ident_mapping_init(struct x86_mapping_info *info, pgd_t *pgd_page,
return 0;
}
-static int __init parse_direct_gbpages_off(char *arg)
-{
- direct_gbpages = 0;
- return 0;
-}
-early_param("nogbpages", parse_direct_gbpages_off);
-
-static int __init parse_direct_gbpages_on(char *arg)
-{
- direct_gbpages = 1;
- return 0;
-}
-early_param("gbpages", parse_direct_gbpages_on);
-
/*
* NOTE: pagetable_init alloc all the fixmap pagetables contiguous on the
* physical space so we can cache the place of the first one and move
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 5/4] x86/mm: Further simplify 1 GB kernel linear mappings handling
2015-03-05 1:24 [RFC v1 0/4] x86: simpify direct_gbpages setting, add early_param_on_off() Luis R. Rodriguez
` (3 preceding siblings ...)
2015-03-05 1:24 ` [RFC v1 4/4] x86: mm: use early_param_on_off() for direct_gbpages Luis R. Rodriguez
@ 2015-03-05 7:23 ` Ingo Molnar
2015-03-05 8:05 ` Jan Beulich
2015-03-05 7:27 ` [PATCH 6/4] x86/mm: Simplify probe_page_size_mask() Ingo Molnar
` (2 subsequent siblings)
7 siblings, 1 reply; 19+ messages in thread
From: Ingo Molnar @ 2015-03-05 7:23 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: gregkh, akpm, tony, tglx, mingo, hpa, jgross, luto, toshi.kani,
dave.hansen, JBeulich, pavel, qiuxishi, david.vrabel, bp, vbabka,
iamjoonsoo.kim, decui, linux-kernel, x86, julia.lawall,
Luis R. Rodriguez
It's a bit pointless to allow Kconfig configuration for 1GB kernel
mappings, it's already hidden behind a 'default y' and CONFIG_EXPERT.
Remove this complication and simplify the code by renaming
CONFIG_ENABLE_DIRECT_GBPAGES to CONFIG_X86_DIRECT_GBPAGES and
document the DEBUG_PAGE_ALLOC and KMEMCHECK quirks.
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Borislav Petkov <bp@suse.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Dexuan Cui <decui@microsoft.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: JBeulich@suse.com
Cc: Jan Beulich <JBeulich@suse.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Cc: julia.lawall@lip6.fr
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/Kconfig | 23 +++++++----------------
arch/x86/mm/init.c | 7 +------
2 files changed, 8 insertions(+), 22 deletions(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 4d06e1c8294a..54d528a37ff4 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1299,22 +1299,13 @@ config ARCH_DMA_ADDR_T_64BIT
def_bool y
depends on X86_64 || HIGHMEM64G
-config ENABLE_DIRECT_GBPAGES
- def_bool y
- depends on X86_64 && !DEBUG_PAGEALLOC && !KMEMCHECK
-
-config DIRECT_GBPAGES
- bool "Enable 1GB pages for kernel pagetables" if EXPERT
- default y
- depends on ENABLE_DIRECT_GBPAGES
- ---help---
- Enable by default the kernel linear mapping to use 1GB pages on CPUs
- that support it. This can improve the kernel's performance a tiny bit
- by reducing TLB pressure. If in doubt, say "Y". If you've disabled
- option but your platform is capable of handling support for this
- you can use the gbpages kernel parameter. Likewise if you've enabled
- this but you'd like to force disable this option you can use the
- nogbpages kernel parameter.
+config X86_DIRECT_GBPAGES
+ def_bool (X86_64 && !DEBUG_PAGEALLOC && !KMEMCHECK)
+ ---help---
+ Certain kernel features effectively disable kernel
+ linear 1 GB mappings (even if the CPU otherwise
+ supports them), so don't confuse the user by printing
+ that we have them enabled.
# Common NUMA Features
config NUMA
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index c35ba8bce7cb..8704153f2675 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -133,15 +133,10 @@ int after_bootmem;
static int page_size_mask;
-early_param_on_off("gbpages", "nogbpages",
- direct_gbpages, CONFIG_DIRECT_GBPAGES);
+early_param_on_off("gbpages", "nogbpages", direct_gbpages, CONFIG_X86_DIRECT_GBPAGES);
static void __init init_gbpages(void)
{
- if (!IS_ENABLED(CONFIG_ENABLE_DIRECT_GBPAGES)) {
- direct_gbpages = 0;
- return;
- }
if (direct_gbpages && cpu_has_gbpages) {
printk(KERN_INFO "Using GB pages for direct mapping\n");
page_size_mask |= 1 << PG_LEVEL_1G;
^ permalink raw reply related [flat|nested] 19+ messages in thread* Re: [PATCH 5/4] x86/mm: Further simplify 1 GB kernel linear mappings handling
2015-03-05 7:23 ` [PATCH 5/4] x86/mm: Further simplify 1 GB kernel linear mappings handling Ingo Molnar
@ 2015-03-05 8:05 ` Jan Beulich
2015-03-05 8:23 ` Ingo Molnar
0 siblings, 1 reply; 19+ messages in thread
From: Jan Beulich @ 2015-03-05 8:05 UTC (permalink / raw)
To: Ingo Molnar
Cc: luto, tony, david.vrabel, Luis R. Rodriguez, toshi.kani, qiuxishi,
x86, iamjoonsoo.kim, tglx, akpm, dave.hansen, gregkh,
julia.lawall, decui, mingo, Juergen Gross, Luis Rodriguez, vbabka,
bp, pavel, linux-kernel, hpa
>>> On 05.03.15 at 08:23, <mingo@kernel.org> wrote:
> It's a bit pointless to allow Kconfig configuration for 1GB kernel
> mappings, it's already hidden behind a 'default y' and CONFIG_EXPERT.
>
> Remove this complication and simplify the code by renaming
> CONFIG_ENABLE_DIRECT_GBPAGES to CONFIG_X86_DIRECT_GBPAGES and
> document the DEBUG_PAGE_ALLOC and KMEMCHECK quirks.
>
> Cc: Luis R. Rodriguez <mcgrof@suse.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Andy Lutomirski <luto@amacapital.net>
> Cc: Borislav Petkov <bp@alien8.de>
> Cc: Borislav Petkov <bp@suse.de>
> Cc: Dave Hansen <dave.hansen@linux.intel.com>
> Cc: David Vrabel <david.vrabel@citrix.com>
> Cc: Dexuan Cui <decui@microsoft.com>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: H. Peter Anvin <hpa@zytor.com>
> Cc: JBeulich@suse.com
> Cc: Jan Beulich <JBeulich@suse.com>
> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
> Cc: Juergen Gross <jgross@suse.com>
> Cc: Linus Torvalds <torvalds@linux-foundation.org>
> Cc: Pavel Machek <pavel@ucw.cz>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Tony Lindgren <tony@atomide.com>
> Cc: Toshi Kani <toshi.kani@hp.com>
> Cc: Vlastimil Babka <vbabka@suse.cz>
> Cc: Xishi Qiu <qiuxishi@huawei.com>
> Cc: julia.lawall@lip6.fr
> Signed-off-by: Ingo Molnar <mingo@kernel.org>
> ---
> arch/x86/Kconfig | 23 +++++++----------------
> arch/x86/mm/init.c | 7 +------
> 2 files changed, 8 insertions(+), 22 deletions(-)
>
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index 4d06e1c8294a..54d528a37ff4 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -1299,22 +1299,13 @@ config ARCH_DMA_ADDR_T_64BIT
> def_bool y
> depends on X86_64 || HIGHMEM64G
>
> -config ENABLE_DIRECT_GBPAGES
> - def_bool y
> - depends on X86_64 && !DEBUG_PAGEALLOC && !KMEMCHECK
> -
> -config DIRECT_GBPAGES
> - bool "Enable 1GB pages for kernel pagetables" if EXPERT
> - default y
> - depends on ENABLE_DIRECT_GBPAGES
> - ---help---
> - Enable by default the kernel linear mapping to use 1GB pages on CPUs
> - that support it. This can improve the kernel's performance a tiny bit
> - by reducing TLB pressure. If in doubt, say "Y". If you've disabled
> - option but your platform is capable of handling support for this
> - you can use the gbpages kernel parameter. Likewise if you've enabled
> - this but you'd like to force disable this option you can use the
> - nogbpages kernel parameter.
> +config X86_DIRECT_GBPAGES
> + def_bool (X86_64 && !DEBUG_PAGEALLOC && !KMEMCHECK)
config X86_DIRECT_GBPAGES
def_bool y
depends on X86_64 && !DEBUG_PAGEALLOC && !KMEMCHECK
or else it'll leave a pointless
# CONFIG_X86_DIRECT_GBPAGES is not set
in .config-s where the dependencies are not met.
Jan
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 5/4] x86/mm: Further simplify 1 GB kernel linear mappings handling
2015-03-05 8:05 ` Jan Beulich
@ 2015-03-05 8:23 ` Ingo Molnar
0 siblings, 0 replies; 19+ messages in thread
From: Ingo Molnar @ 2015-03-05 8:23 UTC (permalink / raw)
To: Jan Beulich
Cc: luto, tony, david.vrabel, Luis R. Rodriguez, toshi.kani, qiuxishi,
x86, iamjoonsoo.kim, tglx, akpm, dave.hansen, gregkh,
julia.lawall, decui, mingo, Juergen Gross, Luis Rodriguez, vbabka,
bp, pavel, linux-kernel, hpa
* Jan Beulich <JBeulich@suse.com> wrote:
> > +config X86_DIRECT_GBPAGES
> > + def_bool (X86_64 && !DEBUG_PAGEALLOC && !KMEMCHECK)
>
> config X86_DIRECT_GBPAGES
> def_bool y
> depends on X86_64 && !DEBUG_PAGEALLOC && !KMEMCHECK
>
> or else it'll leave a pointless
>
> # CONFIG_X86_DIRECT_GBPAGES is not set
>
> in .config-s where the dependencies are not met.
Ok, fixed - thanks!
Ingo
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 6/4] x86/mm: Simplify probe_page_size_mask()
2015-03-05 1:24 [RFC v1 0/4] x86: simpify direct_gbpages setting, add early_param_on_off() Luis R. Rodriguez
` (4 preceding siblings ...)
2015-03-05 7:23 ` [PATCH 5/4] x86/mm: Further simplify 1 GB kernel linear mappings handling Ingo Molnar
@ 2015-03-05 7:27 ` Ingo Molnar
2015-03-05 8:38 ` Juergen Gross
2015-03-05 7:44 ` [PATCH 7/4] init.h: Clean up the __setup()/early_param() macros Ingo Molnar
2015-03-05 8:21 ` [PATCH] x86/mm/pat: Initialize __cachemode2pte_tbl[] and __pte2cachemode_tbl[] in a bit more readable fashion Ingo Molnar
7 siblings, 1 reply; 19+ messages in thread
From: Ingo Molnar @ 2015-03-05 7:27 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: gregkh, akpm, tony, tglx, mingo, hpa, jgross, luto, toshi.kani,
dave.hansen, JBeulich, pavel, qiuxishi, david.vrabel, bp, vbabka,
iamjoonsoo.kim, decui, linux-kernel, x86, julia.lawall,
Luis R. Rodriguez
Now that we've simplified the gbpages config space, move the
'page_size_mask' initialization into probe_page_size_mask(), right
next to the PSE and PGE enablement lines.
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Borislav Petkov <bp@suse.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Dexuan Cui <decui@microsoft.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: JBeulich@suse.com
Cc: Jan Beulich <JBeulich@suse.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Cc: julia.lawall@lip6.fr
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/mm/init.c | 23 ++++++++++-------------
1 file changed, 10 insertions(+), 13 deletions(-)
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 8704153f2675..6dc85d51cd98 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -131,29 +131,18 @@ void __init early_alloc_pgt_buf(void)
int after_bootmem;
-static int page_size_mask;
-
early_param_on_off("gbpages", "nogbpages", direct_gbpages, CONFIG_X86_DIRECT_GBPAGES);
-static void __init init_gbpages(void)
-{
- if (direct_gbpages && cpu_has_gbpages) {
- printk(KERN_INFO "Using GB pages for direct mapping\n");
- page_size_mask |= 1 << PG_LEVEL_1G;
- } else
- direct_gbpages = 0;
-}
-
struct map_range {
unsigned long start;
unsigned long end;
unsigned page_size_mask;
};
+static int page_size_mask;
+
static void __init probe_page_size_mask(void)
{
- init_gbpages();
-
#if !defined(CONFIG_DEBUG_PAGEALLOC) && !defined(CONFIG_KMEMCHECK)
/*
* For CONFIG_DEBUG_PAGEALLOC, identity mapping will use small pages.
@@ -173,6 +162,14 @@ static void __init probe_page_size_mask(void)
cr4_set_bits_and_update_boot(X86_CR4_PGE);
__supported_pte_mask |= _PAGE_GLOBAL;
}
+
+ /* Enable 1 GB linear kernel mappings if available: */
+ if (direct_gbpages && cpu_has_gbpages) {
+ printk(KERN_INFO "Using GB pages for direct mapping\n");
+ page_size_mask |= 1 << PG_LEVEL_1G;
+ } else {
+ direct_gbpages = 0;
+ }
}
#ifdef CONFIG_X86_32
^ permalink raw reply related [flat|nested] 19+ messages in thread* Re: [PATCH 6/4] x86/mm: Simplify probe_page_size_mask()
2015-03-05 7:27 ` [PATCH 6/4] x86/mm: Simplify probe_page_size_mask() Ingo Molnar
@ 2015-03-05 8:38 ` Juergen Gross
2015-03-05 8:47 ` Ingo Molnar
0 siblings, 1 reply; 19+ messages in thread
From: Juergen Gross @ 2015-03-05 8:38 UTC (permalink / raw)
To: Ingo Molnar, Luis R. Rodriguez
Cc: gregkh, akpm, tony, tglx, mingo, hpa, luto, toshi.kani,
dave.hansen, JBeulich, pavel, qiuxishi, david.vrabel, bp, vbabka,
iamjoonsoo.kim, decui, linux-kernel, x86, julia.lawall,
Luis R. Rodriguez
On 03/05/2015 08:27 AM, Ingo Molnar wrote:
>
> Now that we've simplified the gbpages config space, move the
> 'page_size_mask' initialization into probe_page_size_mask(), right
> next to the PSE and PGE enablement lines.
>
> Cc: Luis R. Rodriguez <mcgrof@suse.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Andy Lutomirski <luto@amacapital.net>
> Cc: Borislav Petkov <bp@alien8.de>
> Cc: Borislav Petkov <bp@suse.de>
> Cc: Dave Hansen <dave.hansen@linux.intel.com>
> Cc: David Vrabel <david.vrabel@citrix.com>
> Cc: Dexuan Cui <decui@microsoft.com>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: H. Peter Anvin <hpa@zytor.com>
> Cc: JBeulich@suse.com
> Cc: Jan Beulich <JBeulich@suse.com>
> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
> Cc: Juergen Gross <jgross@suse.com>
> Cc: Linus Torvalds <torvalds@linux-foundation.org>
> Cc: Pavel Machek <pavel@ucw.cz>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Tony Lindgren <tony@atomide.com>
> Cc: Toshi Kani <toshi.kani@hp.com>
> Cc: Vlastimil Babka <vbabka@suse.cz>
> Cc: Xishi Qiu <qiuxishi@huawei.com>
> Cc: julia.lawall@lip6.fr
> Signed-off-by: Ingo Molnar <mingo@kernel.org>
> ---
> arch/x86/mm/init.c | 23 ++++++++++-------------
> 1 file changed, 10 insertions(+), 13 deletions(-)
>
> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
> index 8704153f2675..6dc85d51cd98 100644
> --- a/arch/x86/mm/init.c
> +++ b/arch/x86/mm/init.c
> @@ -131,29 +131,18 @@ void __init early_alloc_pgt_buf(void)
>
> int after_bootmem;
>
> -static int page_size_mask;
> -
> early_param_on_off("gbpages", "nogbpages", direct_gbpages, CONFIG_X86_DIRECT_GBPAGES);
>
> -static void __init init_gbpages(void)
> -{
> - if (direct_gbpages && cpu_has_gbpages) {
> - printk(KERN_INFO "Using GB pages for direct mapping\n");
> - page_size_mask |= 1 << PG_LEVEL_1G;
> - } else
> - direct_gbpages = 0;
> -}
> -
> struct map_range {
> unsigned long start;
> unsigned long end;
> unsigned page_size_mask;
> };
>
> +static int page_size_mask;
> +
> static void __init probe_page_size_mask(void)
> {
> - init_gbpages();
> -
> #if !defined(CONFIG_DEBUG_PAGEALLOC) && !defined(CONFIG_KMEMCHECK)
> /*
> * For CONFIG_DEBUG_PAGEALLOC, identity mapping will use small pages.
> @@ -173,6 +162,14 @@ static void __init probe_page_size_mask(void)
> cr4_set_bits_and_update_boot(X86_CR4_PGE);
> __supported_pte_mask |= _PAGE_GLOBAL;
> }
> +
> + /* Enable 1 GB linear kernel mappings if available: */
> + if (direct_gbpages && cpu_has_gbpages) {
> + printk(KERN_INFO "Using GB pages for direct mapping\n");
pr_info()?
> + page_size_mask |= 1 << PG_LEVEL_1G;
> + } else {
> + direct_gbpages = 0;
> + }
> }
>
> #ifdef CONFIG_X86_32
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
^ permalink raw reply [flat|nested] 19+ messages in thread* Re: [PATCH 6/4] x86/mm: Simplify probe_page_size_mask()
2015-03-05 8:38 ` Juergen Gross
@ 2015-03-05 8:47 ` Ingo Molnar
0 siblings, 0 replies; 19+ messages in thread
From: Ingo Molnar @ 2015-03-05 8:47 UTC (permalink / raw)
To: Juergen Gross
Cc: Luis R. Rodriguez, gregkh, akpm, tony, tglx, mingo, hpa, luto,
toshi.kani, dave.hansen, JBeulich, pavel, qiuxishi, david.vrabel,
bp, vbabka, iamjoonsoo.kim, decui, linux-kernel, x86,
julia.lawall, Luis R. Rodriguez
* Juergen Gross <jgross@suse.com> wrote:
> On 03/05/2015 08:27 AM, Ingo Molnar wrote:
> >
> >Now that we've simplified the gbpages config space, move the
> >'page_size_mask' initialization into probe_page_size_mask(), right
> >next to the PSE and PGE enablement lines.
> >
> >Cc: Luis R. Rodriguez <mcgrof@suse.com>
> >Cc: Andrew Morton <akpm@linux-foundation.org>
> >Cc: Andy Lutomirski <luto@amacapital.net>
> >Cc: Borislav Petkov <bp@alien8.de>
> >Cc: Borislav Petkov <bp@suse.de>
> >Cc: Dave Hansen <dave.hansen@linux.intel.com>
> >Cc: David Vrabel <david.vrabel@citrix.com>
> >Cc: Dexuan Cui <decui@microsoft.com>
> >Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> >Cc: H. Peter Anvin <hpa@zytor.com>
> >Cc: JBeulich@suse.com
> >Cc: Jan Beulich <JBeulich@suse.com>
> >Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
> >Cc: Juergen Gross <jgross@suse.com>
> >Cc: Linus Torvalds <torvalds@linux-foundation.org>
> >Cc: Pavel Machek <pavel@ucw.cz>
> >Cc: Thomas Gleixner <tglx@linutronix.de>
> >Cc: Tony Lindgren <tony@atomide.com>
> >Cc: Toshi Kani <toshi.kani@hp.com>
> >Cc: Vlastimil Babka <vbabka@suse.cz>
> >Cc: Xishi Qiu <qiuxishi@huawei.com>
> >Cc: julia.lawall@lip6.fr
> >Signed-off-by: Ingo Molnar <mingo@kernel.org>
> >---
> > arch/x86/mm/init.c | 23 ++++++++++-------------
> > 1 file changed, 10 insertions(+), 13 deletions(-)
> >
> >diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
> >index 8704153f2675..6dc85d51cd98 100644
> >--- a/arch/x86/mm/init.c
> >+++ b/arch/x86/mm/init.c
> >@@ -131,29 +131,18 @@ void __init early_alloc_pgt_buf(void)
> >
> > int after_bootmem;
> >
> >-static int page_size_mask;
> >-
> > early_param_on_off("gbpages", "nogbpages", direct_gbpages, CONFIG_X86_DIRECT_GBPAGES);
> >
> >-static void __init init_gbpages(void)
> >-{
> >- if (direct_gbpages && cpu_has_gbpages) {
> >- printk(KERN_INFO "Using GB pages for direct mapping\n");
> >- page_size_mask |= 1 << PG_LEVEL_1G;
> >- } else
> >- direct_gbpages = 0;
> >-}
> >-
> > struct map_range {
> > unsigned long start;
> > unsigned long end;
> > unsigned page_size_mask;
> > };
> >
> >+static int page_size_mask;
> >+
> > static void __init probe_page_size_mask(void)
> > {
> >- init_gbpages();
> >-
> > #if !defined(CONFIG_DEBUG_PAGEALLOC) && !defined(CONFIG_KMEMCHECK)
> > /*
> > * For CONFIG_DEBUG_PAGEALLOC, identity mapping will use small pages.
> >@@ -173,6 +162,14 @@ static void __init probe_page_size_mask(void)
> > cr4_set_bits_and_update_boot(X86_CR4_PGE);
> > __supported_pte_mask |= _PAGE_GLOBAL;
> > }
> >+
> >+ /* Enable 1 GB linear kernel mappings if available: */
> >+ if (direct_gbpages && cpu_has_gbpages) {
> >+ printk(KERN_INFO "Using GB pages for direct mapping\n");
>
> pr_info()?
Yeah - probably in a separate patch, as there's three other KERN_
users in arch/x86/mm/init.c.
Thanks,
Ingo
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 7/4] init.h: Clean up the __setup()/early_param() macros
2015-03-05 1:24 [RFC v1 0/4] x86: simpify direct_gbpages setting, add early_param_on_off() Luis R. Rodriguez
` (5 preceding siblings ...)
2015-03-05 7:27 ` [PATCH 6/4] x86/mm: Simplify probe_page_size_mask() Ingo Molnar
@ 2015-03-05 7:44 ` Ingo Molnar
2015-03-05 8:21 ` [PATCH] x86/mm/pat: Initialize __cachemode2pte_tbl[] and __pte2cachemode_tbl[] in a bit more readable fashion Ingo Molnar
7 siblings, 0 replies; 19+ messages in thread
From: Ingo Molnar @ 2015-03-05 7:44 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: gregkh, akpm, tony, tglx, mingo, hpa, jgross, luto, toshi.kani,
dave.hansen, JBeulich, pavel, qiuxishi, david.vrabel, bp, vbabka,
iamjoonsoo.kim, decui, linux-kernel, x86, julia.lawall,
Luis R. Rodriguez
Make it all a bit easier on the eyes:
- Move the __setup_param() lines right after their init functions
- Use consistent vertical spacing
- Use more horizontal spacing to make it look like regular C code
- Use standard comment style
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Borislav Petkov <bp@suse.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Dexuan Cui <decui@microsoft.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Jan Beulich <JBeulich@suse.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Cc: julia.lawall@lip6.fr
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
include/linux/init.h | 49 +++++++++++++++++++++++++++----------------------
1 file changed, 27 insertions(+), 22 deletions(-)
diff --git a/include/linux/init.h b/include/linux/init.h
index bc11ff96f336..21b6d768edd7 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -253,34 +253,39 @@ struct obs_kernel_param {
* obs_kernel_param "array" too far apart in .init.setup.
*/
#define __setup_param(str, unique_id, fn, early) \
- static const char __setup_str_##unique_id[] __initconst \
- __aligned(1) = str; \
- static struct obs_kernel_param __setup_##unique_id \
- __used __section(.init.setup) \
- __attribute__((aligned((sizeof(long))))) \
+ static const char __setup_str_##unique_id[] __initconst \
+ __aligned(1) = str; \
+ static struct obs_kernel_param __setup_##unique_id \
+ __used __section(.init.setup) \
+ __attribute__((aligned((sizeof(long))))) \
= { __setup_str_##unique_id, fn, early }
-#define __setup(str, fn) \
+#define __setup(str, fn) \
__setup_param(str, fn, fn, 0)
-/* NOTE: fn is as per module_param, not __setup! Emits warning if fn
- * returns non-zero. */
-#define early_param(str, fn) \
+/*
+ * NOTE: fn is as per module_param, not __setup!
+ * Emits warning if fn returns non-zero.
+ */
+#define early_param(str, fn) \
__setup_param(str, fn, fn, 1)
-#define early_param_on_off(str_on, str_off, var, config) \
- int var = IS_ENABLED(config); \
- static int __init parse_##var##_on(char *arg) \
- { \
- var = 1; \
- return 0; \
- } \
- static int __init parse_##var##_off(char *arg) \
- { \
- var = 0; \
- return 0; \
- } \
- __setup_param(str_on, parse_##var##_on, parse_##var##_on, 1); \
+#define early_param_on_off(str_on, str_off, var, config) \
+ \
+ int var = IS_ENABLED(config); \
+ \
+ static int __init parse_##var##_on(char *arg) \
+ { \
+ var = 1; \
+ return 0; \
+ } \
+ __setup_param(str_on, parse_##var##_on, parse_##var##_on, 1); \
+ \
+ static int __init parse_##var##_off(char *arg) \
+ { \
+ var = 0; \
+ return 0; \
+ } \
__setup_param(str_off, parse_##var##_off, parse_##var##_off, 1)
/* Relies on boot_command_line being set */
^ permalink raw reply related [flat|nested] 19+ messages in thread* [PATCH] x86/mm/pat: Initialize __cachemode2pte_tbl[] and __pte2cachemode_tbl[] in a bit more readable fashion
2015-03-05 1:24 [RFC v1 0/4] x86: simpify direct_gbpages setting, add early_param_on_off() Luis R. Rodriguez
` (6 preceding siblings ...)
2015-03-05 7:44 ` [PATCH 7/4] init.h: Clean up the __setup()/early_param() macros Ingo Molnar
@ 2015-03-05 8:21 ` Ingo Molnar
2015-03-05 8:42 ` Juergen Gross
2015-03-05 11:51 ` [tip:x86/mm] " tip-bot for Ingo Molnar
7 siblings, 2 replies; 19+ messages in thread
From: Ingo Molnar @ 2015-03-05 8:21 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: gregkh, akpm, tony, tglx, mingo, hpa, jgross, luto, toshi.kani,
dave.hansen, JBeulich, pavel, qiuxishi, david.vrabel, bp, vbabka,
iamjoonsoo.kim, decui, linux-kernel, x86, julia.lawall,
Luis R. Rodriguez
( So this patch is not directly related to gbpages, but while reading
arch/x86/mm/init.c I could not resist ... )
=======================>
The initialization of these two arrays is a bit difficult to follow:
restructure it optically so that a 2D structure shows which bit in
the PTE is set and which not.
Also improve on comments a bit.
No code or data changed:
# arch/x86/mm/init.o:
text data bss dec hex filename
4585 424 29776 34785 87e1 init.o.before
4585 424 29776 34785 87e1 init.o.after
md5:
a82e11ff58bcfd0af3a94662a701f65d init.o.before.asm
a82e11ff58bcfd0af3a94662a701f65d init.o.after.asm
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Jan Beulich <JBeulich@suse.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/mm/init.c | 40 ++++++++++++++++++++++------------------
1 file changed, 22 insertions(+), 18 deletions(-)
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 6dc85d51cd98..4469563f8c3b 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -29,29 +29,33 @@
/*
* Tables translating between page_cache_type_t and pte encoding.
- * Minimal supported modes are defined statically, modified if more supported
- * cache modes are available.
- * Index into __cachemode2pte_tbl is the cachemode.
- * Index into __pte2cachemode_tbl are the caching attribute bits of the pte
- * (_PAGE_PWT, _PAGE_PCD, _PAGE_PAT) at index bit positions 0, 1, 2.
+ *
+ * Minimal supported modes are defined statically, they are modified
+ * during bootup if more supported cache modes are available.
+ *
+ * Index into __cachemode2pte_tbl[] is the cachemode.
+ *
+ * Index into __pte2cachemode_tbl[] are the caching attribute bits of the pte
+ * (_PAGE_PWT, _PAGE_PCD, _PAGE_PAT) at index bit positions 0, 1, 2.
*/
uint16_t __cachemode2pte_tbl[_PAGE_CACHE_MODE_NUM] = {
- [_PAGE_CACHE_MODE_WB] = 0,
- [_PAGE_CACHE_MODE_WC] = _PAGE_PWT,
- [_PAGE_CACHE_MODE_UC_MINUS] = _PAGE_PCD,
- [_PAGE_CACHE_MODE_UC] = _PAGE_PCD | _PAGE_PWT,
- [_PAGE_CACHE_MODE_WT] = _PAGE_PCD,
- [_PAGE_CACHE_MODE_WP] = _PAGE_PCD,
+ [_PAGE_CACHE_MODE_WB ] = 0 | 0 ,
+ [_PAGE_CACHE_MODE_WC ] = _PAGE_PWT | 0 ,
+ [_PAGE_CACHE_MODE_UC_MINUS] = 0 | _PAGE_PCD,
+ [_PAGE_CACHE_MODE_UC ] = _PAGE_PWT | _PAGE_PCD,
+ [_PAGE_CACHE_MODE_WT ] = 0 | _PAGE_PCD,
+ [_PAGE_CACHE_MODE_WP ] = 0 | _PAGE_PCD,
};
EXPORT_SYMBOL(__cachemode2pte_tbl);
+
uint8_t __pte2cachemode_tbl[8] = {
- [__pte2cm_idx(0)] = _PAGE_CACHE_MODE_WB,
- [__pte2cm_idx(_PAGE_PWT)] = _PAGE_CACHE_MODE_WC,
- [__pte2cm_idx(_PAGE_PCD)] = _PAGE_CACHE_MODE_UC_MINUS,
- [__pte2cm_idx(_PAGE_PWT | _PAGE_PCD)] = _PAGE_CACHE_MODE_UC,
- [__pte2cm_idx(_PAGE_PAT)] = _PAGE_CACHE_MODE_WB,
- [__pte2cm_idx(_PAGE_PWT | _PAGE_PAT)] = _PAGE_CACHE_MODE_WC,
- [__pte2cm_idx(_PAGE_PCD | _PAGE_PAT)] = _PAGE_CACHE_MODE_UC_MINUS,
+ [__pte2cm_idx( 0 | 0 | 0 )] = _PAGE_CACHE_MODE_WB,
+ [__pte2cm_idx(_PAGE_PWT | 0 | 0 )] = _PAGE_CACHE_MODE_WC,
+ [__pte2cm_idx( 0 | _PAGE_PCD | 0 )] = _PAGE_CACHE_MODE_UC_MINUS,
+ [__pte2cm_idx(_PAGE_PWT | _PAGE_PCD | 0 )] = _PAGE_CACHE_MODE_UC,
+ [__pte2cm_idx( 0 | 0 | _PAGE_PAT)] = _PAGE_CACHE_MODE_WB,
+ [__pte2cm_idx(_PAGE_PWT | 0 | _PAGE_PAT)] = _PAGE_CACHE_MODE_WC,
+ [__pte2cm_idx(0 | _PAGE_PCD | _PAGE_PAT)] = _PAGE_CACHE_MODE_UC_MINUS,
[__pte2cm_idx(_PAGE_PWT | _PAGE_PCD | _PAGE_PAT)] = _PAGE_CACHE_MODE_UC,
};
EXPORT_SYMBOL(__pte2cachemode_tbl);
^ permalink raw reply related [flat|nested] 19+ messages in thread* Re: [PATCH] x86/mm/pat: Initialize __cachemode2pte_tbl[] and __pte2cachemode_tbl[] in a bit more readable fashion
2015-03-05 8:21 ` [PATCH] x86/mm/pat: Initialize __cachemode2pte_tbl[] and __pte2cachemode_tbl[] in a bit more readable fashion Ingo Molnar
@ 2015-03-05 8:42 ` Juergen Gross
2015-03-05 11:51 ` [tip:x86/mm] " tip-bot for Ingo Molnar
1 sibling, 0 replies; 19+ messages in thread
From: Juergen Gross @ 2015-03-05 8:42 UTC (permalink / raw)
To: Ingo Molnar, Luis R. Rodriguez
Cc: gregkh, akpm, tony, tglx, mingo, hpa, luto, toshi.kani,
dave.hansen, JBeulich, pavel, qiuxishi, david.vrabel, bp, vbabka,
iamjoonsoo.kim, decui, linux-kernel, x86, julia.lawall,
Luis R. Rodriguez
On 03/05/2015 09:21 AM, Ingo Molnar wrote:
>
> ( So this patch is not directly related to gbpages, but while reading
> arch/x86/mm/init.c I could not resist ... )
>
> =======================>
>
> The initialization of these two arrays is a bit difficult to follow:
> restructure it optically so that a 2D structure shows which bit in
> the PTE is set and which not.
>
> Also improve on comments a bit.
>
> No code or data changed:
>
> # arch/x86/mm/init.o:
>
> text data bss dec hex filename
> 4585 424 29776 34785 87e1 init.o.before
> 4585 424 29776 34785 87e1 init.o.after
>
> md5:
> a82e11ff58bcfd0af3a94662a701f65d init.o.before.asm
> a82e11ff58bcfd0af3a94662a701f65d init.o.after.asm
>
> Cc: Andy Lutomirski <luto@amacapital.net>
> Cc: Dave Hansen <dave.hansen@linux.intel.com>
> Cc: Jan Beulich <JBeulich@suse.com>
> Cc: Juergen Gross <jgross@suse.com>
> Cc: Linus Torvalds <torvalds@linux-foundation.org>
> Cc: Luis R. Rodriguez <mcgrof@suse.com>
> Cc: Toshi Kani <toshi.kani@hp.com>
> Cc: linux-kernel@vger.kernel.org
> Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Juergen Gross <jgross@suse.com>
> ---
> arch/x86/mm/init.c | 40 ++++++++++++++++++++++------------------
> 1 file changed, 22 insertions(+), 18 deletions(-)
>
> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
> index 6dc85d51cd98..4469563f8c3b 100644
> --- a/arch/x86/mm/init.c
> +++ b/arch/x86/mm/init.c
> @@ -29,29 +29,33 @@
>
> /*
> * Tables translating between page_cache_type_t and pte encoding.
> - * Minimal supported modes are defined statically, modified if more supported
> - * cache modes are available.
> - * Index into __cachemode2pte_tbl is the cachemode.
> - * Index into __pte2cachemode_tbl are the caching attribute bits of the pte
> - * (_PAGE_PWT, _PAGE_PCD, _PAGE_PAT) at index bit positions 0, 1, 2.
> + *
> + * Minimal supported modes are defined statically, they are modified
> + * during bootup if more supported cache modes are available.
> + *
> + * Index into __cachemode2pte_tbl[] is the cachemode.
> + *
> + * Index into __pte2cachemode_tbl[] are the caching attribute bits of the pte
> + * (_PAGE_PWT, _PAGE_PCD, _PAGE_PAT) at index bit positions 0, 1, 2.
> */
> uint16_t __cachemode2pte_tbl[_PAGE_CACHE_MODE_NUM] = {
> - [_PAGE_CACHE_MODE_WB] = 0,
> - [_PAGE_CACHE_MODE_WC] = _PAGE_PWT,
> - [_PAGE_CACHE_MODE_UC_MINUS] = _PAGE_PCD,
> - [_PAGE_CACHE_MODE_UC] = _PAGE_PCD | _PAGE_PWT,
> - [_PAGE_CACHE_MODE_WT] = _PAGE_PCD,
> - [_PAGE_CACHE_MODE_WP] = _PAGE_PCD,
> + [_PAGE_CACHE_MODE_WB ] = 0 | 0 ,
> + [_PAGE_CACHE_MODE_WC ] = _PAGE_PWT | 0 ,
> + [_PAGE_CACHE_MODE_UC_MINUS] = 0 | _PAGE_PCD,
> + [_PAGE_CACHE_MODE_UC ] = _PAGE_PWT | _PAGE_PCD,
> + [_PAGE_CACHE_MODE_WT ] = 0 | _PAGE_PCD,
> + [_PAGE_CACHE_MODE_WP ] = 0 | _PAGE_PCD,
> };
> EXPORT_SYMBOL(__cachemode2pte_tbl);
> +
> uint8_t __pte2cachemode_tbl[8] = {
> - [__pte2cm_idx(0)] = _PAGE_CACHE_MODE_WB,
> - [__pte2cm_idx(_PAGE_PWT)] = _PAGE_CACHE_MODE_WC,
> - [__pte2cm_idx(_PAGE_PCD)] = _PAGE_CACHE_MODE_UC_MINUS,
> - [__pte2cm_idx(_PAGE_PWT | _PAGE_PCD)] = _PAGE_CACHE_MODE_UC,
> - [__pte2cm_idx(_PAGE_PAT)] = _PAGE_CACHE_MODE_WB,
> - [__pte2cm_idx(_PAGE_PWT | _PAGE_PAT)] = _PAGE_CACHE_MODE_WC,
> - [__pte2cm_idx(_PAGE_PCD | _PAGE_PAT)] = _PAGE_CACHE_MODE_UC_MINUS,
> + [__pte2cm_idx( 0 | 0 | 0 )] = _PAGE_CACHE_MODE_WB,
> + [__pte2cm_idx(_PAGE_PWT | 0 | 0 )] = _PAGE_CACHE_MODE_WC,
> + [__pte2cm_idx( 0 | _PAGE_PCD | 0 )] = _PAGE_CACHE_MODE_UC_MINUS,
> + [__pte2cm_idx(_PAGE_PWT | _PAGE_PCD | 0 )] = _PAGE_CACHE_MODE_UC,
> + [__pte2cm_idx( 0 | 0 | _PAGE_PAT)] = _PAGE_CACHE_MODE_WB,
> + [__pte2cm_idx(_PAGE_PWT | 0 | _PAGE_PAT)] = _PAGE_CACHE_MODE_WC,
> + [__pte2cm_idx(0 | _PAGE_PCD | _PAGE_PAT)] = _PAGE_CACHE_MODE_UC_MINUS,
> [__pte2cm_idx(_PAGE_PWT | _PAGE_PCD | _PAGE_PAT)] = _PAGE_CACHE_MODE_UC,
> };
> EXPORT_SYMBOL(__pte2cachemode_tbl);
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
^ permalink raw reply [flat|nested] 19+ messages in thread* [tip:x86/mm] x86/mm/pat: Initialize __cachemode2pte_tbl[] and __pte2cachemode_tbl[] in a bit more readable fashion
2015-03-05 8:21 ` [PATCH] x86/mm/pat: Initialize __cachemode2pte_tbl[] and __pte2cachemode_tbl[] in a bit more readable fashion Ingo Molnar
2015-03-05 8:42 ` Juergen Gross
@ 2015-03-05 11:51 ` tip-bot for Ingo Molnar
1 sibling, 0 replies; 19+ messages in thread
From: tip-bot for Ingo Molnar @ 2015-03-05 11:51 UTC (permalink / raw)
To: linux-tip-commits
Cc: luto, hpa, linux-kernel, jgross, mcgrof, torvalds, tglx,
dave.hansen, toshi.kani, mingo, JBeulich
Commit-ID: c709feda56886c38af3116254f84cbe6a78b3a5d
Gitweb: http://git.kernel.org/tip/c709feda56886c38af3116254f84cbe6a78b3a5d
Author: Ingo Molnar <mingo@kernel.org>
AuthorDate: Thu, 5 Mar 2015 08:58:44 +0100
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 5 Mar 2015 09:48:17 +0100
x86/mm/pat: Initialize __cachemode2pte_tbl[] and __pte2cachemode_tbl[] in a bit more readable fashion
The initialization of these two arrays is a bit difficult to follow:
restructure it optically so that a 2D structure shows which bit in
the PTE is set and which not.
Also improve on comments a bit.
No code or data changed:
# arch/x86/mm/init.o:
text data bss dec hex filename
4585 424 29776 34785 87e1 init.o.before
4585 424 29776 34785 87e1 init.o.after
md5:
a82e11ff58bcfd0af3a94662a701f65d init.o.before.asm
a82e11ff58bcfd0af3a94662a701f65d init.o.after.asm
Reviewed-by: Juergen Gross <jgross@suse.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Jan Beulich <JBeulich@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Luis R. Rodriguez <mcgrof@suse.com>
Cc: Toshi Kani <toshi.kani@hp.com>
Cc: linux-kernel@vger.kernel.org
Link: http://lkml.kernel.org/r/20150305082135.GB5969@gmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/mm/init.c | 40 ++++++++++++++++++++++------------------
1 file changed, 22 insertions(+), 18 deletions(-)
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 6dc85d5..4469563 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -29,29 +29,33 @@
/*
* Tables translating between page_cache_type_t and pte encoding.
- * Minimal supported modes are defined statically, modified if more supported
- * cache modes are available.
- * Index into __cachemode2pte_tbl is the cachemode.
- * Index into __pte2cachemode_tbl are the caching attribute bits of the pte
- * (_PAGE_PWT, _PAGE_PCD, _PAGE_PAT) at index bit positions 0, 1, 2.
+ *
+ * Minimal supported modes are defined statically, they are modified
+ * during bootup if more supported cache modes are available.
+ *
+ * Index into __cachemode2pte_tbl[] is the cachemode.
+ *
+ * Index into __pte2cachemode_tbl[] are the caching attribute bits of the pte
+ * (_PAGE_PWT, _PAGE_PCD, _PAGE_PAT) at index bit positions 0, 1, 2.
*/
uint16_t __cachemode2pte_tbl[_PAGE_CACHE_MODE_NUM] = {
- [_PAGE_CACHE_MODE_WB] = 0,
- [_PAGE_CACHE_MODE_WC] = _PAGE_PWT,
- [_PAGE_CACHE_MODE_UC_MINUS] = _PAGE_PCD,
- [_PAGE_CACHE_MODE_UC] = _PAGE_PCD | _PAGE_PWT,
- [_PAGE_CACHE_MODE_WT] = _PAGE_PCD,
- [_PAGE_CACHE_MODE_WP] = _PAGE_PCD,
+ [_PAGE_CACHE_MODE_WB ] = 0 | 0 ,
+ [_PAGE_CACHE_MODE_WC ] = _PAGE_PWT | 0 ,
+ [_PAGE_CACHE_MODE_UC_MINUS] = 0 | _PAGE_PCD,
+ [_PAGE_CACHE_MODE_UC ] = _PAGE_PWT | _PAGE_PCD,
+ [_PAGE_CACHE_MODE_WT ] = 0 | _PAGE_PCD,
+ [_PAGE_CACHE_MODE_WP ] = 0 | _PAGE_PCD,
};
EXPORT_SYMBOL(__cachemode2pte_tbl);
+
uint8_t __pte2cachemode_tbl[8] = {
- [__pte2cm_idx(0)] = _PAGE_CACHE_MODE_WB,
- [__pte2cm_idx(_PAGE_PWT)] = _PAGE_CACHE_MODE_WC,
- [__pte2cm_idx(_PAGE_PCD)] = _PAGE_CACHE_MODE_UC_MINUS,
- [__pte2cm_idx(_PAGE_PWT | _PAGE_PCD)] = _PAGE_CACHE_MODE_UC,
- [__pte2cm_idx(_PAGE_PAT)] = _PAGE_CACHE_MODE_WB,
- [__pte2cm_idx(_PAGE_PWT | _PAGE_PAT)] = _PAGE_CACHE_MODE_WC,
- [__pte2cm_idx(_PAGE_PCD | _PAGE_PAT)] = _PAGE_CACHE_MODE_UC_MINUS,
+ [__pte2cm_idx( 0 | 0 | 0 )] = _PAGE_CACHE_MODE_WB,
+ [__pte2cm_idx(_PAGE_PWT | 0 | 0 )] = _PAGE_CACHE_MODE_WC,
+ [__pte2cm_idx( 0 | _PAGE_PCD | 0 )] = _PAGE_CACHE_MODE_UC_MINUS,
+ [__pte2cm_idx(_PAGE_PWT | _PAGE_PCD | 0 )] = _PAGE_CACHE_MODE_UC,
+ [__pte2cm_idx( 0 | 0 | _PAGE_PAT)] = _PAGE_CACHE_MODE_WB,
+ [__pte2cm_idx(_PAGE_PWT | 0 | _PAGE_PAT)] = _PAGE_CACHE_MODE_WC,
+ [__pte2cm_idx(0 | _PAGE_PCD | _PAGE_PAT)] = _PAGE_CACHE_MODE_UC_MINUS,
[__pte2cm_idx(_PAGE_PWT | _PAGE_PCD | _PAGE_PAT)] = _PAGE_CACHE_MODE_UC,
};
EXPORT_SYMBOL(__pte2cachemode_tbl);
^ permalink raw reply related [flat|nested] 19+ messages in thread