[PATCH 38/39] x86/mm/pti: Add Warning when booting on a PCID capable CPU

2018-07-18 Thread Joerg Roedel
From: Joerg Roedel 

Warn the user in case the performance can be significantly
improved by switching to a 64-bit kernel.

Suggested-by: Andy Lutomirski 
Signed-off-by: Joerg Roedel 
---
 arch/x86/mm/pti.c | 22 ++
 1 file changed, 22 insertions(+)

diff --git a/arch/x86/mm/pti.c b/arch/x86/mm/pti.c
index b879ccd..be8d2cd 100644
--- a/arch/x86/mm/pti.c
+++ b/arch/x86/mm/pti.c
@@ -517,6 +517,28 @@ void __init pti_init(void)
 
pr_info("enabled\n");
 
+#ifdef CONFIG_X86_32
+   /*
+* We check for X86_FEATURE_PCID here. But the init-code will
+* clear the feature flag on 32 bit because the feature is not
+* supported on 32 bit anyway. To print the warning we need to
+* check with cpuid directly again.
+*/
+   if (cpuid_ecx(0x1) && BIT(17)) {
+   /* Use printk to work around pr_fmt() */
+   printk(KERN_WARNING "\n");
+   printk(KERN_WARNING 
"\n");
+   printk(KERN_WARNING "** WARNING! WARNING! WARNING! WARNING! 
WARNING! WARNING!  **\n");
+   printk(KERN_WARNING "** 
   **\n");
+   printk(KERN_WARNING "** You are using 32-bit PTI on a 64-bit 
PCID-capable CPU. **\n");
+   printk(KERN_WARNING "** Your performance will increase 
dramatically if you **\n");
+   printk(KERN_WARNING "** switch to a 64-bit kernel!  
   **\n");
+   printk(KERN_WARNING "** 
   **\n");
+   printk(KERN_WARNING "** WARNING! WARNING! WARNING! WARNING! 
WARNING! WARNING!  **\n");
+   printk(KERN_WARNING 
"\n");
+   }
+#endif
+
pti_clone_user_shared();
 
/* Undo all global bits from the init pagetables in head_64.S: */
-- 
2.7.4



[PATCH 38/39] x86/mm/pti: Add Warning when booting on a PCID capable CPU

2018-07-18 Thread Joerg Roedel
From: Joerg Roedel 

Warn the user in case the performance can be significantly
improved by switching to a 64-bit kernel.

Suggested-by: Andy Lutomirski 
Signed-off-by: Joerg Roedel 
---
 arch/x86/mm/pti.c | 22 ++
 1 file changed, 22 insertions(+)

diff --git a/arch/x86/mm/pti.c b/arch/x86/mm/pti.c
index b879ccd..be8d2cd 100644
--- a/arch/x86/mm/pti.c
+++ b/arch/x86/mm/pti.c
@@ -517,6 +517,28 @@ void __init pti_init(void)
 
pr_info("enabled\n");
 
+#ifdef CONFIG_X86_32
+   /*
+* We check for X86_FEATURE_PCID here. But the init-code will
+* clear the feature flag on 32 bit because the feature is not
+* supported on 32 bit anyway. To print the warning we need to
+* check with cpuid directly again.
+*/
+   if (cpuid_ecx(0x1) && BIT(17)) {
+   /* Use printk to work around pr_fmt() */
+   printk(KERN_WARNING "\n");
+   printk(KERN_WARNING 
"\n");
+   printk(KERN_WARNING "** WARNING! WARNING! WARNING! WARNING! 
WARNING! WARNING!  **\n");
+   printk(KERN_WARNING "** 
   **\n");
+   printk(KERN_WARNING "** You are using 32-bit PTI on a 64-bit 
PCID-capable CPU. **\n");
+   printk(KERN_WARNING "** Your performance will increase 
dramatically if you **\n");
+   printk(KERN_WARNING "** switch to a 64-bit kernel!  
   **\n");
+   printk(KERN_WARNING "** 
   **\n");
+   printk(KERN_WARNING "** WARNING! WARNING! WARNING! WARNING! 
WARNING! WARNING!  **\n");
+   printk(KERN_WARNING 
"\n");
+   }
+#endif
+
pti_clone_user_shared();
 
/* Undo all global bits from the init pagetables in head_64.S: */
-- 
2.7.4



Re: [PATCH 38/39] x86/mm/pti: Add Warning when booting on a PCID capable CPU

2018-07-13 Thread Joerg Roedel
On Fri, Jul 13, 2018 at 11:59:44AM -0700, Andy Lutomirski wrote:
> On Wed, Jul 11, 2018 at 4:29 AM, Joerg Roedel  wrote:
> > From: Joerg Roedel 
> >
> > Warn the user in case the performance can be significantly
> > improved by switching to a 64-bit kernel.
> 
> ...
> 
> > +#ifdef CONFIG_X86_32
> > +   if (boot_cpu_has(X86_FEATURE_PCID)) {
> 
> I'm a bit confused. Wouldn't the setup_clear_cpu_cap() call in
> early_identify_cpu() prevent this from working?

Right you are, I don't have a PCID capable system at hand for testing,
so I didn't catch this...

> Boris, do we have a straightforward way to ask "does the CPU advertise
> this feature in CPUID regardless of whether we have it enabled right
> now"?

I guess we need to call cpuid again.


Regards,

Joerg



Re: [PATCH 38/39] x86/mm/pti: Add Warning when booting on a PCID capable CPU

2018-07-13 Thread Joerg Roedel
On Fri, Jul 13, 2018 at 11:59:44AM -0700, Andy Lutomirski wrote:
> On Wed, Jul 11, 2018 at 4:29 AM, Joerg Roedel  wrote:
> > From: Joerg Roedel 
> >
> > Warn the user in case the performance can be significantly
> > improved by switching to a 64-bit kernel.
> 
> ...
> 
> > +#ifdef CONFIG_X86_32
> > +   if (boot_cpu_has(X86_FEATURE_PCID)) {
> 
> I'm a bit confused. Wouldn't the setup_clear_cpu_cap() call in
> early_identify_cpu() prevent this from working?

Right you are, I don't have a PCID capable system at hand for testing,
so I didn't catch this...

> Boris, do we have a straightforward way to ask "does the CPU advertise
> this feature in CPUID regardless of whether we have it enabled right
> now"?

I guess we need to call cpuid again.


Regards,

Joerg



Re: [PATCH 38/39] x86/mm/pti: Add Warning when booting on a PCID capable CPU

2018-07-13 Thread Andy Lutomirski
On Wed, Jul 11, 2018 at 4:29 AM, Joerg Roedel  wrote:
> From: Joerg Roedel 
>
> Warn the user in case the performance can be significantly
> improved by switching to a 64-bit kernel.

...

> +#ifdef CONFIG_X86_32
> +   if (boot_cpu_has(X86_FEATURE_PCID)) {

I'm a bit confused. Wouldn't the setup_clear_cpu_cap() call in
early_identify_cpu() prevent this from working?

Boris, do we have a straightforward way to ask "does the CPU advertise
this feature in CPUID regardless of whether we have it enabled right
now"?

--Andy


Re: [PATCH 38/39] x86/mm/pti: Add Warning when booting on a PCID capable CPU

2018-07-13 Thread Andy Lutomirski
On Wed, Jul 11, 2018 at 4:29 AM, Joerg Roedel  wrote:
> From: Joerg Roedel 
>
> Warn the user in case the performance can be significantly
> improved by switching to a 64-bit kernel.

...

> +#ifdef CONFIG_X86_32
> +   if (boot_cpu_has(X86_FEATURE_PCID)) {

I'm a bit confused. Wouldn't the setup_clear_cpu_cap() call in
early_identify_cpu() prevent this from working?

Boris, do we have a straightforward way to ask "does the CPU advertise
this feature in CPUID regardless of whether we have it enabled right
now"?

--Andy


[PATCH 38/39] x86/mm/pti: Add Warning when booting on a PCID capable CPU

2018-07-11 Thread Joerg Roedel
From: Joerg Roedel 

Warn the user in case the performance can be significantly
improved by switching to a 64-bit kernel.

Suggested-by: Andy Lutomirski 
Signed-off-by: Joerg Roedel 
---
 arch/x86/mm/pti.c | 16 
 1 file changed, 16 insertions(+)

diff --git a/arch/x86/mm/pti.c b/arch/x86/mm/pti.c
index b879ccd..e20283fa 100644
--- a/arch/x86/mm/pti.c
+++ b/arch/x86/mm/pti.c
@@ -517,6 +517,22 @@ void __init pti_init(void)
 
pr_info("enabled\n");
 
+#ifdef CONFIG_X86_32
+   if (boot_cpu_has(X86_FEATURE_PCID)) {
+   /* Use printk to work around pr_fmt() */
+   printk(KERN_WARNING "\n");
+   printk(KERN_WARNING 
"\n");
+   printk(KERN_WARNING "** WARNING! WARNING! WARNING! WARNING! 
WARNING! WARNING!  **\n");
+   printk(KERN_WARNING "** 
   **\n");
+   printk(KERN_WARNING "** You are using 32-bit PTI on a 64-bit 
PCID-capable CPU. **\n");
+   printk(KERN_WARNING "** Your performance will increase 
dramatically if you **\n");
+   printk(KERN_WARNING "** switch to a 64-bit kernel!  
   **\n");
+   printk(KERN_WARNING "** 
   **\n");
+   printk(KERN_WARNING "** WARNING! WARNING! WARNING! WARNING! 
WARNING! WARNING!  **\n");
+   printk(KERN_WARNING 
"\n");
+   }
+#endif
+
pti_clone_user_shared();
 
/* Undo all global bits from the init pagetables in head_64.S: */
-- 
2.7.4



[PATCH 38/39] x86/mm/pti: Add Warning when booting on a PCID capable CPU

2018-07-11 Thread Joerg Roedel
From: Joerg Roedel 

Warn the user in case the performance can be significantly
improved by switching to a 64-bit kernel.

Suggested-by: Andy Lutomirski 
Signed-off-by: Joerg Roedel 
---
 arch/x86/mm/pti.c | 16 
 1 file changed, 16 insertions(+)

diff --git a/arch/x86/mm/pti.c b/arch/x86/mm/pti.c
index b879ccd..e20283fa 100644
--- a/arch/x86/mm/pti.c
+++ b/arch/x86/mm/pti.c
@@ -517,6 +517,22 @@ void __init pti_init(void)
 
pr_info("enabled\n");
 
+#ifdef CONFIG_X86_32
+   if (boot_cpu_has(X86_FEATURE_PCID)) {
+   /* Use printk to work around pr_fmt() */
+   printk(KERN_WARNING "\n");
+   printk(KERN_WARNING 
"\n");
+   printk(KERN_WARNING "** WARNING! WARNING! WARNING! WARNING! 
WARNING! WARNING!  **\n");
+   printk(KERN_WARNING "** 
   **\n");
+   printk(KERN_WARNING "** You are using 32-bit PTI on a 64-bit 
PCID-capable CPU. **\n");
+   printk(KERN_WARNING "** Your performance will increase 
dramatically if you **\n");
+   printk(KERN_WARNING "** switch to a 64-bit kernel!  
   **\n");
+   printk(KERN_WARNING "** 
   **\n");
+   printk(KERN_WARNING "** WARNING! WARNING! WARNING! WARNING! 
WARNING! WARNING!  **\n");
+   printk(KERN_WARNING 
"\n");
+   }
+#endif
+
pti_clone_user_shared();
 
/* Undo all global bits from the init pagetables in head_64.S: */
-- 
2.7.4