All of lore.kernel.org
 help / color / mirror / Atom feed
* [GIT PULL] x86/cpu changes for v3.9
@ 2013-02-19 15:25 Ingo Molnar
  2013-02-19 15:36 ` Borislav Petkov
  0 siblings, 1 reply; 15+ messages in thread
From: Ingo Molnar @ 2013-02-19 15:25 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: linux-kernel, H. Peter Anvin, Thomas Gleixner, Andrew Morton

Linus,

Please pull the latest x86-cpu-for-linus git tree from:

   git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-cpu-for-linus

   HEAD: f0322bd341fd63261527bf84afd3272bcc2e8dd3 x86, AMD: Enable WC+ memory type on family 10 processors

The biggest change is the enabling of the WC+ memory type on 
family 10 processors. (This is a BIOS bug workaround in essence: 
if the BIOS fails to do this then we fall back to uncacheable, 
degrading performance, for example for virtualized guests using 
nested pages.)

 Thanks,

	Ingo

------------------>
Boris Ostrovsky (2):
      x86, AMD: Clean up init_amd()
      x86, AMD: Enable WC+ memory type on family 10 processors

Chen Gang (1):
      x86/process: Change %8s to %s for pr_warn() in release_thread()

Kees Cook (1):
      x86/cpu/hotplug: Remove CONFIG_EXPERIMENTAL dependency


 arch/x86/Kconfig                      |  4 +--
 arch/x86/include/uapi/asm/msr-index.h |  1 +
 arch/x86/kernel/cpu/amd.c             | 50 ++++++++++++++++++++---------------
 arch/x86/kernel/process_64.c          |  2 +-
 4 files changed, 32 insertions(+), 25 deletions(-)

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 79795af..2d62103 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1699,7 +1699,7 @@ config HOTPLUG_CPU
 config BOOTPARAM_HOTPLUG_CPU0
 	bool "Set default setting of cpu0_hotpluggable"
 	default n
-	depends on HOTPLUG_CPU && EXPERIMENTAL
+	depends on HOTPLUG_CPU
 	---help---
 	  Set whether default state of cpu0_hotpluggable is on or off.
 
@@ -1728,7 +1728,7 @@ config BOOTPARAM_HOTPLUG_CPU0
 config DEBUG_HOTPLUG_CPU0
 	def_bool n
 	prompt "Debug CPU0 hotplug"
-	depends on HOTPLUG_CPU && EXPERIMENTAL
+	depends on HOTPLUG_CPU
 	---help---
 	  Enabling this option offlines CPU0 (if CPU0 can be offlined) as
 	  soon as possible and boots up userspace with CPU0 offlined. User
diff --git a/arch/x86/include/uapi/asm/msr-index.h b/arch/x86/include/uapi/asm/msr-index.h
index 433a59f..158cde9 100644
--- a/arch/x86/include/uapi/asm/msr-index.h
+++ b/arch/x86/include/uapi/asm/msr-index.h
@@ -173,6 +173,7 @@
 #define MSR_AMD64_OSVW_ID_LENGTH	0xc0010140
 #define MSR_AMD64_OSVW_STATUS		0xc0010141
 #define MSR_AMD64_DC_CFG		0xc0011022
+#define MSR_AMD64_BU_CFG2		0xc001102a
 #define MSR_AMD64_IBSFETCHCTL		0xc0011030
 #define MSR_AMD64_IBSFETCHLINAD		0xc0011031
 #define MSR_AMD64_IBSFETCHPHYSAD	0xc0011032
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index 15239ff..721ef32 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -518,10 +518,9 @@ static void __cpuinit early_init_amd(struct cpuinfo_x86 *c)
 static void __cpuinit init_amd(struct cpuinfo_x86 *c)
 {
 	u32 dummy;
-
-#ifdef CONFIG_SMP
 	unsigned long long value;
 
+#ifdef CONFIG_SMP
 	/*
 	 * Disable TLB flush filter by setting HWCR.FFDIS on K8
 	 * bit 6 of msr C001_0015
@@ -559,12 +558,10 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
 		 * (AMD Erratum #110, docId: 25759).
 		 */
 		if (c->x86_model < 0x14 && cpu_has(c, X86_FEATURE_LAHF_LM)) {
-			u64 val;
-
 			clear_cpu_cap(c, X86_FEATURE_LAHF_LM);
-			if (!rdmsrl_amd_safe(0xc001100d, &val)) {
-				val &= ~(1ULL << 32);
-				wrmsrl_amd_safe(0xc001100d, val);
+			if (!rdmsrl_amd_safe(0xc001100d, &value)) {
+				value &= ~(1ULL << 32);
+				wrmsrl_amd_safe(0xc001100d, value);
 			}
 		}
 
@@ -617,13 +614,12 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
 	if ((c->x86 == 0x15) &&
 	    (c->x86_model >= 0x10) && (c->x86_model <= 0x1f) &&
 	    !cpu_has(c, X86_FEATURE_TOPOEXT)) {
-		u64 val;
 
-		if (!rdmsrl_safe(0xc0011005, &val)) {
-			val |= 1ULL << 54;
-			wrmsrl_safe(0xc0011005, val);
-			rdmsrl(0xc0011005, val);
-			if (val & (1ULL << 54)) {
+		if (!rdmsrl_safe(0xc0011005, &value)) {
+			value |= 1ULL << 54;
+			wrmsrl_safe(0xc0011005, value);
+			rdmsrl(0xc0011005, value);
+			if (value & (1ULL << 54)) {
 				set_cpu_cap(c, X86_FEATURE_TOPOEXT);
 				printk(KERN_INFO FW_INFO "CPU: Re-enabling "
 				  "disabled Topology Extensions Support\n");
@@ -637,11 +633,10 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
 	 */
 	if ((c->x86 == 0x15) &&
 	    (c->x86_model >= 0x02) && (c->x86_model < 0x20)) {
-		u64 val;
 
-		if (!rdmsrl_safe(0xc0011021, &val) && !(val & 0x1E)) {
-			val |= 0x1E;
-			wrmsrl_safe(0xc0011021, val);
+		if (!rdmsrl_safe(0xc0011021, &value) && !(value & 0x1E)) {
+			value |= 0x1E;
+			wrmsrl_safe(0xc0011021, value);
 		}
 	}
 
@@ -703,13 +698,11 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
 	if (c->x86 > 0x11)
 		set_cpu_cap(c, X86_FEATURE_ARAT);
 
-	/*
-	 * Disable GART TLB Walk Errors on Fam10h. We do this here
-	 * because this is always needed when GART is enabled, even in a
-	 * kernel which has no MCE support built in.
-	 */
 	if (c->x86 == 0x10) {
 		/*
+		 * Disable GART TLB Walk Errors on Fam10h. We do this here
+		 * because this is always needed when GART is enabled, even in a
+		 * kernel which has no MCE support built in.
 		 * BIOS should disable GartTlbWlk Errors themself. If
 		 * it doesn't do it here as suggested by the BKDG.
 		 *
@@ -723,6 +716,19 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
 			mask |= (1 << 10);
 			wrmsrl_safe(MSR_AMD64_MCx_MASK(4), mask);
 		}
+
+		/*
+		 * On family 10h BIOS may not have properly enabled WC+ support,
+		 * causing it to be converted to CD memtype. This may result in
+		 * performance degradation for certain nested-paging guests.
+		 * Prevent this conversion by clearing bit 24 in
+		 * MSR_AMD64_BU_CFG2.
+		 */
+		if (c->x86 == 0x10) {
+			rdmsrl(MSR_AMD64_BU_CFG2, value);
+			value &= ~(1ULL << 24);
+			wrmsrl(MSR_AMD64_BU_CFG2, value);
+		}
 	}
 
 	rdmsr_safe(MSR_AMD64_PATCH_LEVEL, &c->microcode, &dummy);
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
index 6e68a61..0f49677 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@ -117,7 +117,7 @@ void release_thread(struct task_struct *dead_task)
 {
 	if (dead_task->mm) {
 		if (dead_task->mm->context.size) {
-			pr_warn("WARNING: dead process %8s still has LDT? <%p/%d>\n",
+			pr_warn("WARNING: dead process %s still has LDT? <%p/%d>\n",
 				dead_task->comm,
 				dead_task->mm->context.ldt,
 				dead_task->mm->context.size);

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [GIT PULL] x86/cpu changes for v3.9
  2013-02-19 15:25 [GIT PULL] x86/cpu changes for v3.9 Ingo Molnar
@ 2013-02-19 15:36 ` Borislav Petkov
  2013-02-19 15:47   ` Ingo Molnar
  0 siblings, 1 reply; 15+ messages in thread
From: Borislav Petkov @ 2013-02-19 15:36 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Linus Torvalds, linux-kernel, H. Peter Anvin, Thomas Gleixner,
	Andrew Morton

On Tue, Feb 19, 2013 at 04:25:03PM +0100, Ingo Molnar wrote:
> Linus,
> 
> Please pull the latest x86-cpu-for-linus git tree from:
> 
>    git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-cpu-for-linus
> 
>    HEAD: f0322bd341fd63261527bf84afd3272bcc2e8dd3 x86, AMD: Enable WC+ memory type on family 10 processors
> 
> The biggest change is the enabling of the WC+ memory type on 
> family 10 processors. (This is a BIOS bug workaround in essence: 
> if the BIOS fails to do this then we fall back to uncacheable, 
> degrading performance, for example for virtualized guests using 
> nested pages.)
> 
>  Thanks,
> 
> 	Ingo
> 
> ------------------>
> Boris Ostrovsky (2):
>       x86, AMD: Clean up init_amd()
>       x86, AMD: Enable WC+ memory type on family 10 processors

Those kill a kvm guest with a #GP. Can we apply the fix for it too pls?

http://marc.info/?l=linux-kernel&m=136077007423065&w=2

-- 
Regards/Gruss,
    Boris.

Sent from a fat crate under my desk. Formatting is fine.
--

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [GIT PULL] x86/cpu changes for v3.9
  2013-02-19 15:36 ` Borislav Petkov
@ 2013-02-19 15:47   ` Ingo Molnar
  2013-02-19 17:38     ` H. Peter Anvin
  0 siblings, 1 reply; 15+ messages in thread
From: Ingo Molnar @ 2013-02-19 15:47 UTC (permalink / raw)
  To: Borislav Petkov, Linus Torvalds, linux-kernel, H. Peter Anvin,
	Thomas Gleixner, Andrew Morton


* Borislav Petkov <bp@alien8.de> wrote:

> On Tue, Feb 19, 2013 at 04:25:03PM +0100, Ingo Molnar wrote:
> > Linus,
> > 
> > Please pull the latest x86-cpu-for-linus git tree from:
> > 
> >    git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-cpu-for-linus
> > 
> >    HEAD: f0322bd341fd63261527bf84afd3272bcc2e8dd3 x86, AMD: Enable WC+ memory type on family 10 processors
> > 
> > The biggest change is the enabling of the WC+ memory type on 
> > family 10 processors. (This is a BIOS bug workaround in essence: 
> > if the BIOS fails to do this then we fall back to uncacheable, 
> > degrading performance, for example for virtualized guests using 
> > nested pages.)
> > 
> >  Thanks,
> > 
> > 	Ingo
> > 
> > ------------------>
> > Boris Ostrovsky (2):
> >       x86, AMD: Clean up init_amd()
> >       x86, AMD: Enable WC+ memory type on family 10 processors
> 
> Those kill a kvm guest with a #GP. Can we apply the fix for it too pls?
> 
> http://marc.info/?l=linux-kernel&m=136077007423065&w=2

Linus, please skip this pull request, we'll sort it out.

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [GIT PULL] x86/cpu changes for v3.9
  2013-02-19 15:47   ` Ingo Molnar
@ 2013-02-19 17:38     ` H. Peter Anvin
  2013-02-19 17:47       ` Borislav Petkov
  0 siblings, 1 reply; 15+ messages in thread
From: H. Peter Anvin @ 2013-02-19 17:38 UTC (permalink / raw)
  To: Ingo Molnar, Boris Ostrovsky
  Cc: Borislav Petkov, Linus Torvalds, linux-kernel, Thomas Gleixner,
	Andrew Morton

On 02/19/2013 07:47 AM, Ingo Molnar wrote:
>>
>> Those kill a kvm guest with a #GP. Can we apply the fix for it too pls?
>>
>> http://marc.info/?l=linux-kernel&m=136077007423065&w=2
>
> Linus, please skip this pull request, we'll sort it out.
>

My fault... I was tracking the fix and lost track of the thread.

The problem is that the fix is necessary but not sufficient, as it 
introduces an undesirable host-guest dependency.  In order to allow 
neerw guests to work on older hosts we also should use the 
{rd,wr}msr_safe() functions to manipulate this MSR, with a comment as to 
why.

Boris, could you prepare such a patch, please?

	-hpa


-- 
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel.  I don't speak on their behalf.


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [GIT PULL] x86/cpu changes for v3.9
  2013-02-19 17:38     ` H. Peter Anvin
@ 2013-02-19 17:47       ` Borislav Petkov
  2013-02-19 17:51         ` H. Peter Anvin
  2013-02-19 17:57         ` [GIT PULL] x86/cpu changes for v3.9 Konrad Rzeszutek Wilk
  0 siblings, 2 replies; 15+ messages in thread
From: Borislav Petkov @ 2013-02-19 17:47 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Ingo Molnar, Boris Ostrovsky, Linus Torvalds, linux-kernel,
	Thomas Gleixner, Andrew Morton

On Tue, Feb 19, 2013 at 09:38:31AM -0800, H. Peter Anvin wrote:
> My fault... I was tracking the fix and lost track of the thread.
> 
> The problem is that the fix is necessary but not sufficient, as it
> introduces an undesirable host-guest dependency.  In order to allow
> neerw guests to work on older hosts we also should use the
> {rd,wr}msr_safe() functions to manipulate this MSR, with a comment
> as to why.
> 
> Boris, could you prepare such a patch, please?

I don't think Boris O. is at AMD anymore. Want me to add that to my fix
for kvm or prep a separate patch?

-- 
Regards/Gruss,
    Boris.

Sent from a fat crate under my desk. Formatting is fine.
--

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [GIT PULL] x86/cpu changes for v3.9
  2013-02-19 17:47       ` Borislav Petkov
@ 2013-02-19 17:51         ` H. Peter Anvin
  2013-02-19 18:33           ` [PATCH 1/2] x86, CPU, AMD: Fix WC+ workaround for older hosts Borislav Petkov
  2013-02-19 17:57         ` [GIT PULL] x86/cpu changes for v3.9 Konrad Rzeszutek Wilk
  1 sibling, 1 reply; 15+ messages in thread
From: H. Peter Anvin @ 2013-02-19 17:51 UTC (permalink / raw)
  To: Borislav Petkov, Ingo Molnar, Boris Ostrovsky, Linus Torvalds,
	linux-kernel, Thomas Gleixner, Andrew Morton

On 02/19/2013 09:47 AM, Borislav Petkov wrote:
> On Tue, Feb 19, 2013 at 09:38:31AM -0800, H. Peter Anvin wrote:
>> My fault... I was tracking the fix and lost track of the thread.
>>
>> The problem is that the fix is necessary but not sufficient, as it
>> introduces an undesirable host-guest dependency.  In order to allow
>> neerw guests to work on older hosts we also should use the
>> {rd,wr}msr_safe() functions to manipulate this MSR, with a comment
>> as to why.
>>
>> Boris, could you prepare such a patch, please?
>
> I don't think Boris O. is at AMD anymore. Want me to add that to my fix
> for kvm or prep a separate patch?
>

Separate patch, please, and yes, I would greatly appreciate it.

	-hpa

-- 
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel.  I don't speak on their behalf.


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [GIT PULL] x86/cpu changes for v3.9
  2013-02-19 17:47       ` Borislav Petkov
  2013-02-19 17:51         ` H. Peter Anvin
@ 2013-02-19 17:57         ` Konrad Rzeszutek Wilk
  2013-02-19 18:01           ` Borislav Petkov
  2013-02-19 18:19           ` Boris Ostrovsky
  1 sibling, 2 replies; 15+ messages in thread
From: Konrad Rzeszutek Wilk @ 2013-02-19 17:57 UTC (permalink / raw)
  To: Borislav Petkov, H. Peter Anvin, Ingo Molnar, Boris Ostrovsky,
	Linus Torvalds, linux-kernel, Thomas Gleixner, Andrew Morton,
	boris.ostrovsky

On Tue, Feb 19, 2013 at 06:47:58PM +0100, Borislav Petkov wrote:
> On Tue, Feb 19, 2013 at 09:38:31AM -0800, H. Peter Anvin wrote:
> > My fault... I was tracking the fix and lost track of the thread.
> > 
> > The problem is that the fix is necessary but not sufficient, as it
> > introduces an undesirable host-guest dependency.  In order to allow
> > neerw guests to work on older hosts we also should use the
> > {rd,wr}msr_safe() functions to manipulate this MSR, with a comment
> > as to why.
> > 
> > Boris, could you prepare such a patch, please?
> 
> I don't think Boris O. is at AMD anymore. Want me to add that to my fix
> for kvm or prep a separate patch?

CC-ing Boris.
> 
> -- 
> Regards/Gruss,
>     Boris.
> 
> Sent from a fat crate under my desk. Formatting is fine.
> --
> --
> 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] 15+ messages in thread

* Re: [GIT PULL] x86/cpu changes for v3.9
  2013-02-19 17:57         ` [GIT PULL] x86/cpu changes for v3.9 Konrad Rzeszutek Wilk
@ 2013-02-19 18:01           ` Borislav Petkov
  2013-02-19 18:19           ` Boris Ostrovsky
  1 sibling, 0 replies; 15+ messages in thread
From: Borislav Petkov @ 2013-02-19 18:01 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk
  Cc: H. Peter Anvin, Ingo Molnar, Boris Ostrovsky, Linus Torvalds,
	linux-kernel, Thomas Gleixner, Andrew Morton, boris.ostrovsky

On Tue, Feb 19, 2013 at 12:57:27PM -0500, Konrad Rzeszutek Wilk wrote:
> CC-ing Boris.

Ah, the string after the "@" and before the ".com" is different now :-)

-- 
Regards/Gruss,
    Boris.

Sent from a fat crate under my desk. Formatting is fine.
--

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [GIT PULL] x86/cpu changes for v3.9
  2013-02-19 17:57         ` [GIT PULL] x86/cpu changes for v3.9 Konrad Rzeszutek Wilk
  2013-02-19 18:01           ` Borislav Petkov
@ 2013-02-19 18:19           ` Boris Ostrovsky
  2013-02-19 18:21             ` H. Peter Anvin
  1 sibling, 1 reply; 15+ messages in thread
From: Boris Ostrovsky @ 2013-02-19 18:19 UTC (permalink / raw)
  To: H. Peter Anvin, Ingo Molnar
  Cc: Konrad Rzeszutek Wilk, Borislav Petkov, Linus Torvalds,
	linux-kernel, Thomas Gleixner, Andrew Morton

On 02/19/2013 12:57 PM, Konrad Rzeszutek Wilk wrote:
> On Tue, Feb 19, 2013 at 06:47:58PM +0100, Borislav Petkov wrote:
>> On Tue, Feb 19, 2013 at 09:38:31AM -0800, H. Peter Anvin wrote:
>>> My fault... I was tracking the fix and lost track of the thread.
>>>
>>> The problem is that the fix is necessary but not sufficient, as it
>>> introduces an undesirable host-guest dependency.  In order to allow
>>> neerw guests to work on older hosts we also should use the
>>> {rd,wr}msr_safe() functions to manipulate this MSR, with a comment
>>> as to why.
>>>
>>> Boris, could you prepare such a patch, please?
>> I don't think Boris O. is at AMD anymore. Want me to add that to my fix
>> for kvm or prep a separate patch?
> CC-ing Boris.

BorisP's patch is what I should have done. Can you take it?

-boris



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [GIT PULL] x86/cpu changes for v3.9
  2013-02-19 18:19           ` Boris Ostrovsky
@ 2013-02-19 18:21             ` H. Peter Anvin
  2013-02-19 18:26               ` Boris Ostrovsky
  0 siblings, 1 reply; 15+ messages in thread
From: H. Peter Anvin @ 2013-02-19 18:21 UTC (permalink / raw)
  To: Boris Ostrovsky
  Cc: Ingo Molnar, Konrad Rzeszutek Wilk, Borislav Petkov,
	Linus Torvalds, linux-kernel, Thomas Gleixner, Andrew Morton

On 02/19/2013 10:19 AM, Boris Ostrovsky wrote:
> On 02/19/2013 12:57 PM, Konrad Rzeszutek Wilk wrote:
>> On Tue, Feb 19, 2013 at 06:47:58PM +0100, Borislav Petkov wrote:
>>> On Tue, Feb 19, 2013 at 09:38:31AM -0800, H. Peter Anvin wrote:
>>>> My fault... I was tracking the fix and lost track of the thread.
>>>>
>>>> The problem is that the fix is necessary but not sufficient, as it
>>>> introduces an undesirable host-guest dependency.  In order to allow
>>>> neerw guests to work on older hosts we also should use the
>>>> {rd,wr}msr_safe() functions to manipulate this MSR, with a comment
>>>> as to why.
>>>>
>>>> Boris, could you prepare such a patch, please?
>>> I don't think Boris O. is at AMD anymore. Want me to add that to my fix
>>> for kvm or prep a separate patch?
>> CC-ing Boris.
>
> BorisP's patch is what I should have done. Can you take it?
>

As I stated:

 >>>> The problem is that the fix is necessary but not sufficient, as it
 >>>> introduces an undesirable host-guest dependency.  In order to allow
 >>>> neerw guests to work on older hosts we also should use the
 >>>> {rd,wr}msr_safe() functions to manipulate this MSR, with a comment
 >>>> as to why.

	-hpa

-- 
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel.  I don't speak on their behalf.


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [GIT PULL] x86/cpu changes for v3.9
  2013-02-19 18:21             ` H. Peter Anvin
@ 2013-02-19 18:26               ` Boris Ostrovsky
  0 siblings, 0 replies; 15+ messages in thread
From: Boris Ostrovsky @ 2013-02-19 18:26 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Ingo Molnar, Konrad Rzeszutek Wilk, Borislav Petkov,
	Linus Torvalds, linux-kernel, Thomas Gleixner, Andrew Morton

On 02/19/2013 01:21 PM, H. Peter Anvin wrote:
> On 02/19/2013 10:19 AM, Boris Ostrovsky wrote:
>> On 02/19/2013 12:57 PM, Konrad Rzeszutek Wilk wrote:
>>> On Tue, Feb 19, 2013 at 06:47:58PM +0100, Borislav Petkov wrote:
>>>> On Tue, Feb 19, 2013 at 09:38:31AM -0800, H. Peter Anvin wrote:
>>>>> My fault... I was tracking the fix and lost track of the thread.
>>>>>
>>>>> The problem is that the fix is necessary but not sufficient, as it
>>>>> introduces an undesirable host-guest dependency.  In order to allow
>>>>> neerw guests to work on older hosts we also should use the
>>>>> {rd,wr}msr_safe() functions to manipulate this MSR, with a comment
>>>>> as to why.
>>>>>
>>>>> Boris, could you prepare such a patch, please?
>>>> I don't think Boris O. is at AMD anymore. Want me to add that to my 
>>>> fix
>>>> for kvm or prep a separate patch?
>>> CC-ing Boris.
>>
>> BorisP's patch is what I should have done. Can you take it?
>>
>
> As I stated:
>
> >>>> The problem is that the fix is necessary but not sufficient, as it
> >>>> introduces an undesirable host-guest dependency. In order to allow
> >>>> neerw guests to work on older hosts we also should use the
> >>>> {rd,wr}msr_safe() functions to manipulate this MSR, with a comment
> >>>> as to why.

Ah, sorry --- I missed that part.

-boris


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH 1/2] x86, CPU, AMD: Fix WC+ workaround for older hosts
  2013-02-19 17:51         ` H. Peter Anvin
@ 2013-02-19 18:33           ` Borislav Petkov
  2013-02-19 18:33             ` [PATCH 2/2] x86, kvm: Add MSR_AMD64_BU_CFG2 to the list of ignored MSRs Borislav Petkov
  2013-02-19 19:29             ` [tip:x86/cpu] x86, cpu, amd: Fix WC+ workaround for older virtual hosts tip-bot for Borislav Petkov
  0 siblings, 2 replies; 15+ messages in thread
From: Borislav Petkov @ 2013-02-19 18:33 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Ingo Molnar, Thomas Gleixner, Linus Torvalds, Andrew Morton,
	LKML, Boris Ostrovsky, Borislav Petkov, Gleb Natapov

From: Borislav Petkov <bp@suse.de>

The WC+ workaround for F10h introduces a new MSR and kvm host #GPs
on accesses to unknown MSRs if paravirt is not compiled in. Use the
exception-handling MSR accessors so as not to break 3.8 and later guests
booting on older hosts.

Remove a redundant family check while at it.

Cc: Gleb Natapov <gleb@redhat.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Link: http://lkml.kernel.org/r/20130219153655.GD26748@pd.tnic
Signed-off-by: Borislav Petkov <bp@suse.de>
---
 arch/x86/kernel/cpu/amd.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index 721ef3208eb5..163af4a91d09 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -723,12 +723,14 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
 		 * performance degradation for certain nested-paging guests.
 		 * Prevent this conversion by clearing bit 24 in
 		 * MSR_AMD64_BU_CFG2.
+		 *
+		 * NOTE: we want to use the _safe accessors so as not to #GP kvm
+		 * guests on older kvm hosts.
 		 */
-		if (c->x86 == 0x10) {
-			rdmsrl(MSR_AMD64_BU_CFG2, value);
-			value &= ~(1ULL << 24);
-			wrmsrl(MSR_AMD64_BU_CFG2, value);
-		}
+
+		rdmsrl_safe(MSR_AMD64_BU_CFG2, &value);
+		value &= ~(1ULL << 24);
+		wrmsrl_safe(MSR_AMD64_BU_CFG2, value);
 	}
 
 	rdmsr_safe(MSR_AMD64_PATCH_LEVEL, &c->microcode, &dummy);
-- 
1.8.1.3.535.ga923c31


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 2/2] x86, kvm: Add MSR_AMD64_BU_CFG2 to the list of ignored MSRs
  2013-02-19 18:33           ` [PATCH 1/2] x86, CPU, AMD: Fix WC+ workaround for older hosts Borislav Petkov
@ 2013-02-19 18:33             ` Borislav Petkov
  2013-02-19 19:30               ` [tip:x86/cpu] " tip-bot for Borislav Petkov
  2013-02-19 19:29             ` [tip:x86/cpu] x86, cpu, amd: Fix WC+ workaround for older virtual hosts tip-bot for Borislav Petkov
  1 sibling, 1 reply; 15+ messages in thread
From: Borislav Petkov @ 2013-02-19 18:33 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Ingo Molnar, Thomas Gleixner, Linus Torvalds, Andrew Morton,
	LKML, Boris Ostrovsky, Borislav Petkov, Andre Przywara,
	Marcelo Tosatti

From: Borislav Petkov <bp@suse.de>

The "x86, AMD: Enable WC+ memory type on family 10 processors" patch
currently in -tip added a workaround for AMD F10h CPUs which #GPs my
guest when booted in kvm. This is because it accesses MSR_AMD64_BU_CFG2
which is not currently ignored by kvm. Do that because this MSR is only
baremetal-relevant anyway. While at it, move the ignored MSRs at the
beginning of kvm_set_msr_common so that we exit then and there.

Acked-by: Gleb Natapov <gleb@redhat.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Andre Przywara <andre@andrep.de>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
---
 arch/x86/kvm/x86.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index c243b81e3c74..37040079cd6b 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -1881,6 +1881,14 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
 	u64 data = msr_info->data;
 
 	switch (msr) {
+	case MSR_AMD64_NB_CFG:
+	case MSR_IA32_UCODE_REV:
+	case MSR_IA32_UCODE_WRITE:
+	case MSR_VM_HSAVE_PA:
+	case MSR_AMD64_PATCH_LOADER:
+	case MSR_AMD64_BU_CFG2:
+		break;
+
 	case MSR_EFER:
 		return set_efer(vcpu, data);
 	case MSR_K7_HWCR:
@@ -1900,8 +1908,6 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
 			return 1;
 		}
 		break;
-	case MSR_AMD64_NB_CFG:
-		break;
 	case MSR_IA32_DEBUGCTLMSR:
 		if (!data) {
 			/* We support the non-activated case already */
@@ -1914,11 +1920,6 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
 		vcpu_unimpl(vcpu, "%s: MSR_IA32_DEBUGCTLMSR 0x%llx, nop\n",
 			    __func__, data);
 		break;
-	case MSR_IA32_UCODE_REV:
-	case MSR_IA32_UCODE_WRITE:
-	case MSR_VM_HSAVE_PA:
-	case MSR_AMD64_PATCH_LOADER:
-		break;
 	case 0x200 ... 0x2ff:
 		return set_msr_mtrr(vcpu, msr, data);
 	case MSR_IA32_APICBASE:
@@ -2253,6 +2254,7 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata)
 	case MSR_K8_INT_PENDING_MSG:
 	case MSR_AMD64_NB_CFG:
 	case MSR_FAM10H_MMIO_CONF_BASE:
+	case MSR_AMD64_BU_CFG2:
 		data = 0;
 		break;
 	case MSR_P6_PERFCTR0:
-- 
1.8.1.3.535.ga923c31


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [tip:x86/cpu] x86, cpu, amd: Fix WC+ workaround for older virtual hosts
  2013-02-19 18:33           ` [PATCH 1/2] x86, CPU, AMD: Fix WC+ workaround for older hosts Borislav Petkov
  2013-02-19 18:33             ` [PATCH 2/2] x86, kvm: Add MSR_AMD64_BU_CFG2 to the list of ignored MSRs Borislav Petkov
@ 2013-02-19 19:29             ` tip-bot for Borislav Petkov
  1 sibling, 0 replies; 15+ messages in thread
From: tip-bot for Borislav Petkov @ 2013-02-19 19:29 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, hpa, mingo, boris.ostrovsky, gleb, tglx, bp, hpa

Commit-ID:  52d3d06e706bdde3d6c5c386deb065c3b4c51618
Gitweb:     http://git.kernel.org/tip/52d3d06e706bdde3d6c5c386deb065c3b4c51618
Author:     Borislav Petkov <bp@suse.de>
AuthorDate: Tue, 19 Feb 2013 19:33:12 +0100
Committer:  H. Peter Anvin <hpa@linux.intel.com>
CommitDate: Tue, 19 Feb 2013 10:44:00 -0800

x86, cpu, amd: Fix WC+ workaround for older virtual hosts

The WC+ workaround for F10h introduces a new MSR and kvm host #GPs
on accesses to unknown MSRs if paravirt is not compiled in. Use the
exception-handling MSR accessors so as not to break 3.8 and later guests
booting on older hosts.

Remove a redundant family check while at it.

Cc: Gleb Natapov <gleb@redhat.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: http://lkml.kernel.org/r/1361298793-31834-1-git-send-email-bp@alien8.de
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---
 arch/x86/kernel/cpu/amd.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index 721ef32..163af4a 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -723,12 +723,14 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
 		 * performance degradation for certain nested-paging guests.
 		 * Prevent this conversion by clearing bit 24 in
 		 * MSR_AMD64_BU_CFG2.
+		 *
+		 * NOTE: we want to use the _safe accessors so as not to #GP kvm
+		 * guests on older kvm hosts.
 		 */
-		if (c->x86 == 0x10) {
-			rdmsrl(MSR_AMD64_BU_CFG2, value);
-			value &= ~(1ULL << 24);
-			wrmsrl(MSR_AMD64_BU_CFG2, value);
-		}
+
+		rdmsrl_safe(MSR_AMD64_BU_CFG2, &value);
+		value &= ~(1ULL << 24);
+		wrmsrl_safe(MSR_AMD64_BU_CFG2, value);
 	}
 
 	rdmsr_safe(MSR_AMD64_PATCH_LEVEL, &c->microcode, &dummy);

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [tip:x86/cpu] x86, kvm: Add MSR_AMD64_BU_CFG2 to the list of ignored MSRs
  2013-02-19 18:33             ` [PATCH 2/2] x86, kvm: Add MSR_AMD64_BU_CFG2 to the list of ignored MSRs Borislav Petkov
@ 2013-02-19 19:30               ` tip-bot for Borislav Petkov
  0 siblings, 0 replies; 15+ messages in thread
From: tip-bot for Borislav Petkov @ 2013-02-19 19:30 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, hpa, mingo, boris.ostrovsky, gleb, andre, mtosatti,
	tglx, hpa, bp

Commit-ID:  2e32b7190641a184b8510d3e342400473ff1ab60
Gitweb:     http://git.kernel.org/tip/2e32b7190641a184b8510d3e342400473ff1ab60
Author:     Borislav Petkov <bp@suse.de>
AuthorDate: Tue, 19 Feb 2013 19:33:13 +0100
Committer:  H. Peter Anvin <hpa@linux.intel.com>
CommitDate: Tue, 19 Feb 2013 10:44:07 -0800

x86, kvm: Add MSR_AMD64_BU_CFG2 to the list of ignored MSRs

The "x86, AMD: Enable WC+ memory type on family 10 processors" patch
currently in -tip added a workaround for AMD F10h CPUs which #GPs my
guest when booted in kvm. This is because it accesses MSR_AMD64_BU_CFG2
which is not currently ignored by kvm. Do that because this MSR is only
baremetal-relevant anyway. While at it, move the ignored MSRs at the
beginning of kvm_set_msr_common so that we exit then and there.

Acked-by: Gleb Natapov <gleb@redhat.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Andre Przywara <andre@andrep.de>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: http://lkml.kernel.org/r/1361298793-31834-2-git-send-email-bp@alien8.de
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---
 arch/x86/kvm/x86.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index c243b81..3704007 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -1881,6 +1881,14 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
 	u64 data = msr_info->data;
 
 	switch (msr) {
+	case MSR_AMD64_NB_CFG:
+	case MSR_IA32_UCODE_REV:
+	case MSR_IA32_UCODE_WRITE:
+	case MSR_VM_HSAVE_PA:
+	case MSR_AMD64_PATCH_LOADER:
+	case MSR_AMD64_BU_CFG2:
+		break;
+
 	case MSR_EFER:
 		return set_efer(vcpu, data);
 	case MSR_K7_HWCR:
@@ -1900,8 +1908,6 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
 			return 1;
 		}
 		break;
-	case MSR_AMD64_NB_CFG:
-		break;
 	case MSR_IA32_DEBUGCTLMSR:
 		if (!data) {
 			/* We support the non-activated case already */
@@ -1914,11 +1920,6 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
 		vcpu_unimpl(vcpu, "%s: MSR_IA32_DEBUGCTLMSR 0x%llx, nop\n",
 			    __func__, data);
 		break;
-	case MSR_IA32_UCODE_REV:
-	case MSR_IA32_UCODE_WRITE:
-	case MSR_VM_HSAVE_PA:
-	case MSR_AMD64_PATCH_LOADER:
-		break;
 	case 0x200 ... 0x2ff:
 		return set_msr_mtrr(vcpu, msr, data);
 	case MSR_IA32_APICBASE:
@@ -2253,6 +2254,7 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata)
 	case MSR_K8_INT_PENDING_MSG:
 	case MSR_AMD64_NB_CFG:
 	case MSR_FAM10H_MMIO_CONF_BASE:
+	case MSR_AMD64_BU_CFG2:
 		data = 0;
 		break;
 	case MSR_P6_PERFCTR0:

^ permalink raw reply related	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2013-02-19 19:32 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-02-19 15:25 [GIT PULL] x86/cpu changes for v3.9 Ingo Molnar
2013-02-19 15:36 ` Borislav Petkov
2013-02-19 15:47   ` Ingo Molnar
2013-02-19 17:38     ` H. Peter Anvin
2013-02-19 17:47       ` Borislav Petkov
2013-02-19 17:51         ` H. Peter Anvin
2013-02-19 18:33           ` [PATCH 1/2] x86, CPU, AMD: Fix WC+ workaround for older hosts Borislav Petkov
2013-02-19 18:33             ` [PATCH 2/2] x86, kvm: Add MSR_AMD64_BU_CFG2 to the list of ignored MSRs Borislav Petkov
2013-02-19 19:30               ` [tip:x86/cpu] " tip-bot for Borislav Petkov
2013-02-19 19:29             ` [tip:x86/cpu] x86, cpu, amd: Fix WC+ workaround for older virtual hosts tip-bot for Borislav Petkov
2013-02-19 17:57         ` [GIT PULL] x86/cpu changes for v3.9 Konrad Rzeszutek Wilk
2013-02-19 18:01           ` Borislav Petkov
2013-02-19 18:19           ` Boris Ostrovsky
2013-02-19 18:21             ` H. Peter Anvin
2013-02-19 18:26               ` Boris Ostrovsky

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.