x86/AMD: apply erratum 665 workaround

AMD F12h machines have an erratum which can cause DIV/IDIV to behave
unpredictably. The workaround is to set MSRC001_1029[31] but sometimes
there is no BIOS update containing that workaround so let's do it
ourselves unconditionally. It is simple enough.

[ Borislav: Wrote commit message. ]

Signed-off-by: Emanuel Czirai <icanrealizeum@gmail.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
[Linux commit: d1992996753132e2dafe955cccb2fb0714d3cfc4]

Make applicable to Xen.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
master commit: 6bfee20385
master date: 2016-09-26 17:28:09 +0200
This commit is contained in:
Emanuel Czirai authored and Jan Beulich committed 2016-09-28 17:04:13 +02:00
1 parent e6f8bfb567
commit ef005cc1f8
2 files changed
+14 -1

No files matched your search

+12
View File
@@ -563,6 +563,18 @@ static void __devinit init_amd(struct cpuinfo_x86 *c)
smp_processor_id());
wrmsrl(MSR_AMD64_LS_CFG, value | (1 << 15));
}
} else if (c->x86 == 0x12) {
rdmsrl(MSR_AMD64_DE_CFG, value);
if (!(value & (1U << 31))) {
static bool_t warned;
if (c == &boot_cpu_data || opt_cpu_info ||
!test_and_set_bool(warned))
printk(KERN_WARNING
"CPU%u: Applying workaround for erratum 665\n",
smp_processor_id());
wrmsrl(MSR_AMD64_DE_CFG, value | (1U << 31));
}
}
/* AMD CPUs do not support SYSENTER outside of legacy mode. */
+2 -1
View File
@@ -203,10 +203,11 @@
/* AMD64 MSRs */
#define MSR_AMD64_NB_CFG 0xc001001f
#define AMD64_NB_CFG_CF8_EXT_ENABLE_BIT 46
#define MSR_AMD64_LS_CFG 0xc0011020
#define MSR_AMD64_IC_CFG 0xc0011021
#define MSR_AMD64_DC_CFG 0xc0011022
#define AMD64_NB_CFG_CF8_EXT_ENABLE_BIT 46
#define MSR_AMD64_DE_CFG 0xc0011029
#define MSR_AMD64_DR0_ADDRESS_MASK 0xc0011027
#define MSR_AMD64_DR1_ADDRESS_MASK 0xc0011019
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.