* [PATCH v9 1/4] x86/msr: add MSR_MISC_FEATURE_ENABLES and RING3MWAIT bit
2016-11-09 13:46 [PATCH v9 0/4] Enabling Ring 3 MONITOR/MWAIT feature for Knights Landing Grzegorz Andrejczuk
@ 2016-11-09 13:46 ` Grzegorz Andrejczuk
2016-11-09 13:46 ` [PATCH v9 2/4] x86/elf: use HWCAP2 to expose ring 3 MWAIT Grzegorz Andrejczuk
` (3 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Grzegorz Andrejczuk @ 2016-11-09 13:46 UTC (permalink / raw)
To: tglx, mingo, hpa, x86
Cc: bp, dave.hansen, lukasz.daniluk, james.h.cownie, jacob.jun.pan,
Piotr.Luc, linux-kernel, Grzegorz Andrejczuk
Intel Xeon Phi x200 (codenamed Knights Landing) allows to enable
MONITOR and MWAIT instructions outside of ring 0.
The feature is controlled by MSR MISC_FEATURE_ENABLES (0x140).
Setting bit 1 of this register enables it, so MONITOR and MWAIT
instructions do not cause invalid-opcode exceptions when invoked
outside of ring 0.
The feature MSR is not yet documented in the SDM. Here is
the relevant documentation:
Hex Dec Name Scope
140H 320 MISC_FEATURE_ENABLES Thread
0 Reserved
1 if set to 1, the MONITOR and MWAIT instructions do not
cause invalid-opcode exceptions when executed with CPL > 0
or in virtual-8086 mode. If MWAIT is executed when CPL > 0
or in virtual-8086 mode, and if EAX indicates a C-state
other than C0 or C1, the instruction operates as if EAX
indicated the C-state C1.
63:2 Reserved
Signed-off-by: Grzegorz Andrejczuk <grzegorz.andrejczuk@intel.com>
---
arch/x86/include/asm/msr-index.h | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
index 56f4c66..c95da90 100644
--- a/arch/x86/include/asm/msr-index.h
+++ b/arch/x86/include/asm/msr-index.h
@@ -540,6 +540,11 @@
#define MSR_IA32_MISC_ENABLE_IP_PREF_DISABLE_BIT 39
#define MSR_IA32_MISC_ENABLE_IP_PREF_DISABLE (1ULL << MSR_IA32_MISC_ENABLE_IP_PREF_DISABLE_BIT)
+/* Intel Xeon Phi x200 ring 3 MONITOR/MWAIT */
+#define MSR_MISC_FEATURE_ENABLES 0x00000140
+#define MSR_MISC_FEATURE_ENABLES_RING3MWAIT_BIT 1
+#define MSR_MISC_FEATURE_ENABLES_RING3MWAIT (1ULL << MSR_MISC_FEATURE_ENABLES_RING3MWAIT_BIT)
+
#define MSR_IA32_TSC_DEADLINE 0x000006E0
/* P4/Xeon+ specific */
--
2.5.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v9 2/4] x86/elf: use HWCAP2 to expose ring 3 MWAIT
2016-11-09 13:46 [PATCH v9 0/4] Enabling Ring 3 MONITOR/MWAIT feature for Knights Landing Grzegorz Andrejczuk
2016-11-09 13:46 ` [PATCH v9 1/4] x86/msr: add MSR_MISC_FEATURE_ENABLES and RING3MWAIT bit Grzegorz Andrejczuk
@ 2016-11-09 13:46 ` Grzegorz Andrejczuk
2016-11-09 13:46 ` [PATCH v9 3/4] x86/cpufeature: add RING3MWAIT to CPU features Grzegorz Andrejczuk
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Grzegorz Andrejczuk @ 2016-11-09 13:46 UTC (permalink / raw)
To: tglx, mingo, hpa, x86
Cc: bp, dave.hansen, lukasz.daniluk, james.h.cownie, jacob.jun.pan,
Piotr.Luc, linux-kernel, Grzegorz Andrejczuk
Add HWCAP2 for x86 and reserve its bit 0 to expose
ring 3 mwait.
Signed-off-by: Grzegorz Andrejczuk <grzegorz.andrejczuk@intel.com>
---
arch/x86/include/asm/elf.h | 9 +++++++++
arch/x86/include/uapi/asm/hwcap2.h | 7 +++++++
arch/x86/kernel/cpu/common.c | 3 +++
3 files changed, 19 insertions(+)
create mode 100644 arch/x86/include/uapi/asm/hwcap2.h
diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h
index e7f155c..59703aa 100644
--- a/arch/x86/include/asm/elf.h
+++ b/arch/x86/include/asm/elf.h
@@ -258,6 +258,15 @@ extern int force_personality32;
#define ELF_HWCAP (boot_cpu_data.x86_capability[CPUID_1_EDX])
+extern unsigned int elf_hwcap2;
+
+/*
+ * HWCAP2 supplies mask with kernel enabled CPU features, so that
+ * the application can discover that it can safely use them.
+ * The bits are defined in uapi/asm/hwcap2.h.
+ */
+#define ELF_HWCAP2 elf_hwcap2
+
/* This yields a string that ld.so will use to load implementation
specific libraries for optimization. This is more specific in
intent than poking at uname or /proc/cpuinfo.
diff --git a/arch/x86/include/uapi/asm/hwcap2.h b/arch/x86/include/uapi/asm/hwcap2.h
new file mode 100644
index 0000000..116cab3
--- /dev/null
+++ b/arch/x86/include/uapi/asm/hwcap2.h
@@ -0,0 +1,7 @@
+#ifndef _ASM_X86_HWCAP2_H
+#define _ASM_X86_HWCAP2_H
+
+/* Kernel enabled Ring 3 MONITOR/MWAIT*/
+#define HWCAP2_RING3MWAIT (1 << 0)
+
+#endif
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index bcc9ccc..fdbf708 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -35,6 +35,7 @@
#include <asm/desc.h>
#include <asm/fpu/internal.h>
#include <asm/mtrr.h>
+#include <asm/hwcap2.h>
#include <linux/numa.h>
#include <asm/asm.h>
#include <asm/bugs.h>
@@ -51,6 +52,8 @@
#include "cpu.h"
+unsigned int elf_hwcap2 __read_mostly;
+
/* all of these masks are initialized in setup_cpu_local_masks() */
cpumask_var_t cpu_initialized_mask;
cpumask_var_t cpu_callout_mask;
--
2.5.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v9 3/4] x86/cpufeature: add RING3MWAIT to CPU features
2016-11-09 13:46 [PATCH v9 0/4] Enabling Ring 3 MONITOR/MWAIT feature for Knights Landing Grzegorz Andrejczuk
2016-11-09 13:46 ` [PATCH v9 1/4] x86/msr: add MSR_MISC_FEATURE_ENABLES and RING3MWAIT bit Grzegorz Andrejczuk
2016-11-09 13:46 ` [PATCH v9 2/4] x86/elf: use HWCAP2 to expose ring 3 MWAIT Grzegorz Andrejczuk
@ 2016-11-09 13:46 ` Grzegorz Andrejczuk
2016-11-09 13:46 ` [PATCH v9 4/4] x86/cpufeatures: handle RING3MWAIT on Xeon Phi models Grzegorz Andrejczuk
2016-11-09 14:31 ` [PATCH v9 0/4] Enabling Ring 3 MONITOR/MWAIT feature for Knights Landing Thomas Gleixner
4 siblings, 0 replies; 8+ messages in thread
From: Grzegorz Andrejczuk @ 2016-11-09 13:46 UTC (permalink / raw)
To: tglx, mingo, hpa, x86
Cc: bp, dave.hansen, lukasz.daniluk, james.h.cownie, jacob.jun.pan,
Piotr.Luc, linux-kernel, Grzegorz Andrejczuk
Add Intel Xeon Phi x200 (KnightsLanding) CPU feature - ring 3 MONITOR/MWAIT.
Signed-off-by: Grzegorz Andrejczuk <grzegorz.andrejczuk@intel.com>
---
arch/x86/include/asm/cpufeatures.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
index 92a8308..5b7f701 100644
--- a/arch/x86/include/asm/cpufeatures.h
+++ b/arch/x86/include/asm/cpufeatures.h
@@ -100,7 +100,7 @@
#define X86_FEATURE_XTOPOLOGY ( 3*32+22) /* cpu topology enum extensions */
#define X86_FEATURE_TSC_RELIABLE ( 3*32+23) /* TSC is known to be reliable */
#define X86_FEATURE_NONSTOP_TSC ( 3*32+24) /* TSC does not stop in C states */
-/* free, was #define X86_FEATURE_CLFLUSH_MONITOR ( 3*32+25) * "" clflush reqd with monitor */
+#define X86_FEATURE_RING3MWAIT ( 3*32+25) /* ring 3 MONITOR/MWAIT */
#define X86_FEATURE_EXTD_APICID ( 3*32+26) /* has extended APICID (8 bits) */
#define X86_FEATURE_AMD_DCM ( 3*32+27) /* multi-node processor */
#define X86_FEATURE_APERFMPERF ( 3*32+28) /* APERFMPERF */
--
2.5.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v9 4/4] x86/cpufeatures: handle RING3MWAIT on Xeon Phi models
2016-11-09 13:46 [PATCH v9 0/4] Enabling Ring 3 MONITOR/MWAIT feature for Knights Landing Grzegorz Andrejczuk
` (2 preceding siblings ...)
2016-11-09 13:46 ` [PATCH v9 3/4] x86/cpufeature: add RING3MWAIT to CPU features Grzegorz Andrejczuk
@ 2016-11-09 13:46 ` Grzegorz Andrejczuk
2016-11-09 14:31 ` [PATCH v9 0/4] Enabling Ring 3 MONITOR/MWAIT feature for Knights Landing Thomas Gleixner
4 siblings, 0 replies; 8+ messages in thread
From: Grzegorz Andrejczuk @ 2016-11-09 13:46 UTC (permalink / raw)
To: tglx, mingo, hpa, x86
Cc: bp, dave.hansen, lukasz.daniluk, james.h.cownie, jacob.jun.pan,
Piotr.Luc, linux-kernel, Grzegorz Andrejczuk
Unfortunately presence of this feature cannot be detected
automatically (by reading some other MSR) therefore it is required
to do explicit check for the family and model of the cpu.
If processor is Intel Xeon Phi x200 RING 3 MONITOR/MWAIT feature is enabled
by setting cpu cap X86_FEATURE_RING3MWAIT and elf HWCAP2_RING3MWAIT.
Signed-off-by: Grzegorz Andrejczuk <grzegorz.andrejczuk@intel.com>
---
Documentation/kernel-parameters.txt | 6 +++++
Documentation/x86/x86_64/boot-options.txt | 5 ++++
arch/x86/kernel/cpu/intel.c | 39 +++++++++++++++++++++++++++++++
3 files changed, 50 insertions(+)
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index a4f4d69..4683cc1 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -3120,6 +3120,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
pg. [PARIDE]
See Documentation/blockdev/paride.txt.
+ phir3mwait= [X86-64] Disable ring 3 MONITOR/MWAIT on Intel Xeon Phi
+ codenamed Knight Landing cpus.
+ It has no effect on cpus other than Intel Xeon Phi.
+ Format: { disable }
+ See Documentation/x86/x86_64/boot-options.txt
+
pirq= [SMP,APIC] Manual mp-table setup
See Documentation/x86/i386/IO-APIC.txt.
diff --git a/Documentation/x86/x86_64/boot-options.txt b/Documentation/x86/x86_64/boot-options.txt
index 0965a71..1a515e8 100644
--- a/Documentation/x86/x86_64/boot-options.txt
+++ b/Documentation/x86/x86_64/boot-options.txt
@@ -281,6 +281,11 @@ Debugging
kstack=N Print N words from the kernel stack in oops dumps.
+ phir3mwait=disable
+ Disables unconditional setting bit 1 of the MSR_MISC_FEATURE_ENABLES
+ for Intel Xeon Phi, this way administrator can switch off ring 3 mwait
+ feature.
+
Miscellaneous
nogbpages
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
index fcd484d..3bfc8e5 100644
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@ -14,6 +14,8 @@
#include <asm/bugs.h>
#include <asm/cpu.h>
#include <asm/intel-family.h>
+#include <asm/hwcap2.h>
+#include <asm/elf.h>
#ifdef CONFIG_X86_64
#include <linux/topology.h>
@@ -61,6 +63,41 @@ void check_mpx_erratum(struct cpuinfo_x86 *c)
}
}
+#ifdef CONFIG_X86_64
+static int phi_r3mwait_disabled __read_mostly;
+
+static int __init phir3mwait_disable(char *__unused)
+{
+ phi_r3mwait_disabled = 1;
+ return 1;
+}
+__setup("phir3mwait=disable", phir3mwait_disable);
+
+static void probe_xeon_phi_r3mwait(struct cpuinfo_x86 *c)
+{
+ /*
+ * Ring 3 MONITOR/MWAIT feature cannot be detected without
+ * cpu model and family comparison.
+ */
+ if (c->x86 != 6 || c->x86_model != INTEL_FAM6_XEON_PHI_KNL)
+ return;
+
+ if (phi_r3mwait_disabled) {
+ msr_clear_bit(MSR_MISC_FEATURE_ENABLES,
+ MSR_MISC_FEATURE_ENABLES_RING3MWAIT_BIT);
+ return;
+ }
+
+ msr_set_bit(MSR_MISC_FEATURE_ENABLES,
+ MSR_MISC_FEATURE_ENABLES_RING3MWAIT_BIT);
+ set_cpu_cap(c, X86_FEATURE_RING3MWAIT);
+ ELF_HWCAP2 |= HWCAP2_RING3MWAIT;
+}
+
+#else
+static void probe_xeon_phi_r3mwait(struct cpuinfo_x86 *__unused) {}
+#endif
+
static void early_init_intel(struct cpuinfo_x86 *c)
{
u64 misc_enable;
@@ -565,6 +602,8 @@ static void init_intel(struct cpuinfo_x86 *c)
detect_vmx_virtcap(c);
init_intel_energy_perf(c);
+
+ probe_xeon_phi_r3mwait(c);
}
#ifdef CONFIG_X86_32
--
2.5.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v9 0/4] Enabling Ring 3 MONITOR/MWAIT feature for Knights Landing
2016-11-09 13:46 [PATCH v9 0/4] Enabling Ring 3 MONITOR/MWAIT feature for Knights Landing Grzegorz Andrejczuk
` (3 preceding siblings ...)
2016-11-09 13:46 ` [PATCH v9 4/4] x86/cpufeatures: handle RING3MWAIT on Xeon Phi models Grzegorz Andrejczuk
@ 2016-11-09 14:31 ` Thomas Gleixner
2016-11-09 21:48 ` Andrejczuk, Grzegorz
4 siblings, 1 reply; 8+ messages in thread
From: Thomas Gleixner @ 2016-11-09 14:31 UTC (permalink / raw)
To: Grzegorz Andrejczuk
Cc: mingo, hpa, x86, bp, dave.hansen, lukasz.daniluk, james.h.cownie,
jacob.jun.pan, Piotr.Luc, linux-kernel
On Wed, 9 Nov 2016, Grzegorz Andrejczuk wrote:
> These patches enable Intel Xeon Phi x200 feature to use MONITOR/MWAIT
> instruction in ring 3 (userspace) Patches set MSR 0x140 for all logical CPUs.
> Then expose it as CPU feature and introduces elf HWCAP capability for x86.
> Reference:
> https://software.intel.com/en-us/blogs/2016/10/06/intel-xeon-phi-product-family-x200-knl-user-mode-ring-3-monitor-and-mwait
>
> v9:
> Removed PHI from defines
Do I really have to spell out everything? I asked you several times to get
rid of all PHI associations except for the feature detection logic.
But no, you still insist on it being a PHI special feature and once it
becomes available on other models, which can be expected, we can deal with
the cleanup and a PHI specific kernel parameter which we have to support
forever.
I'm slowly starting to get really grumpy. Your attitude of just addressing
review comments in the most minimal way w/o thinking about the big picture
is annoying.
This is hillarious. 9 versions of that simple thing, just because you
insist on slapping PHI to everything despite being told otherwise.
I do not care about the time you waste with this, but I very much care
about the time you steal from me.
If you can't be bothered to send something which addresses _ALL_ my review
comments, then so be it. The next version is the last one I'm going to look
at.
Thanks,
tglx
^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH v9 0/4] Enabling Ring 3 MONITOR/MWAIT feature for Knights Landing
2016-11-09 14:31 ` [PATCH v9 0/4] Enabling Ring 3 MONITOR/MWAIT feature for Knights Landing Thomas Gleixner
@ 2016-11-09 21:48 ` Andrejczuk, Grzegorz
2016-11-09 22:21 ` Thomas Gleixner
0 siblings, 1 reply; 8+ messages in thread
From: Andrejczuk, Grzegorz @ 2016-11-09 21:48 UTC (permalink / raw)
To: Thomas Gleixner
Cc: mingo, hpa, x86, bp, dave.hansen, Daniluk, Lukasz, Cownie,
James H, Pan, Jacob jun, Luc, Piotr, linux-kernel
-----Original Message-----
From: Thomas Gleixner [mailto:tglx@linutronix.de]
Sent: Wednesday, November 9, 2016 3:32 PM
To: Andrejczuk, Grzegorz <grzegorz.andrejczuk@intel.com>
Cc: mingo@redhat.com; hpa@zytor.com; x86@kernel.org; bp@suse.de; dave.hansen@linux.intel.com; Daniluk, Lukasz <lukasz.daniluk@intel.com>; Cownie, James H <james.h.cownie@intel.com>; Pan, Jacob jun <jacob.jun.pan@intel.com>; Luc, Piotr <Piotr.Luc@intel.com>; linux-kernel@vger.kernel.org
Subject: Re: [PATCH v9 0/4] Enabling Ring 3 MONITOR/MWAIT feature for Knights Landing
On Wed, 9 Nov 2016, Grzegorz Andrejczuk wrote:
> These patches enable Intel Xeon Phi x200 feature to use MONITOR/MWAIT
> instruction in ring 3 (userspace) Patches set MSR 0x140 for all logical CPUs.
> Then expose it as CPU feature and introduces elf HWCAP capability for x86.
> Reference:
> https://software.intel.com/en-us/blogs/2016/10/06/intel-xeon-phi-produ
> ct-family-x200-knl-user-mode-ring-3-monitor-and-mwait
>
> v9:
> Removed PHI from defines
>
> Do I really have to spell out everything? I asked you several times to get rid of all PHI associations except for the feature detection logic.
>
> But no, you still insist on it being a PHI special feature and once it becomes available on other models, which can be expected, we can deal with the cleanup and a PHI specific kernel parameter which we have to support forever.
>
> I'm slowly starting to get really grumpy. Your attitude of just addressing review comments in the most minimal way w/o thinking about the big picture is annoying.
>
> This is hillarious. 9 versions of that simple thing, just because you insist on slapping PHI to everything despite being told otherwise.
>
> I do not care about the time you waste with this, but I very much care about the time you steal from me.
>
> If you can't be bothered to send something which addresses _ALL_ my review comments, then so be it. The next version is the last one I'm going to look at.
>
> Thanks,
>
> Tglx
Hi,
Sorry we end up in this situation.
I have removed PHI from:
- MSR definition,
- HWCAP2 bit,
- X86_CPU_FEATURE
Making kernel parameter non-phi would require implementing the ring3mwait=disable for any other non-ring 0 MWAIT (i.e AMD MWAITX).
My concern is that kernel will have to maintain various non architectural model specific stuff in single kernel parameter.
Best Regards,
Grzegorz
^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH v9 0/4] Enabling Ring 3 MONITOR/MWAIT feature for Knights Landing
2016-11-09 21:48 ` Andrejczuk, Grzegorz
@ 2016-11-09 22:21 ` Thomas Gleixner
0 siblings, 0 replies; 8+ messages in thread
From: Thomas Gleixner @ 2016-11-09 22:21 UTC (permalink / raw)
To: Andrejczuk, Grzegorz
Cc: mingo, hpa, x86, bp, dave.hansen, Daniluk, Lukasz, Cownie,
James H, Pan, Jacob jun, Luc, Piotr, linux-kernel
On Wed, 9 Nov 2016, Andrejczuk, Grzegorz wrote:
> -----Original Message-----
> From: Thomas Gleixner [mailto:tglx@linutronix.de]
Can you pretty please use a mail client which does not copy the whole mail
header into the mail body? That's just annoying.
> Sorry we end up in this situation.
>
> I have removed PHI from:
> - MSR definition,
> - HWCAP2 bit,
> - X86_CPU_FEATURE
>
> Making kernel parameter non-phi would require implementing the
> ring3mwait=disable for any other non-ring 0 MWAIT (i.e AMD MWAITX).
No, it would not. Simply because AMD does not yet provide any means to
enable ring3 MWAIT in the kernel and adding this parameter does not require
to implement it at all. There are gazillions of generic kernel parameters
which are only effective on particular systems. They describe a general
feature not a particular implementation.
If that support for AMD gets ever implemented then it definitely wants to
reuse ring3wait and not phiring3mwait and neiter it wants to add
amdF16ring3mwait..
That feature is going to show up on other Intel cpus sooner than later.
Are we supposed to have xeonring3mwait and atomring3mwait command line
options as well?
Can you see how that gets silly very fast?
> My concern is that kernel will have to maintain various non architectural
> model specific stuff in single kernel parameter.
The feature of enabling ring3 mwait is the same whether it's on PHI, xeon,
atom or some AMD model. Why on earth should they use a different parameter?
If you think I'm wrong, then discuss that instead of silently ignoring my
review requests and resending the same stuff over and over. We could have
been done with that thing weeks ago.
Thanks,
tglx
^ permalink raw reply [flat|nested] 8+ messages in thread