* [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
* [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, 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
* [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
* 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
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.