mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
x86/amd: Fold another DE_CFG edit into amd_init_de_cfg()
As amd_init_de_cfg() states, it's only safe for there to be one location
writing to DE_CFG. This happens to be a latent bug rather than a real one
because Fam12h CPUs aren't SMT-capable. Nevertheless, group it together with
the other DE_CFG modifications.
This removes a printk() which is not noteworthy, and skips the adjustment
entirely under virt, where the attempted write wouldn't have stuck anyway.
Fixes: d0c75dc4c0 ("x86/amd: Fix race editing DE_CFG")
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
3a814060bb
commit
f49bbd301b
1 file changed
+7
-9
@@ -920,6 +920,13 @@ void amd_init_de_cfg(const struct cpuinfo_x86 *c)
|
||||
if ( zenbleed_use_chickenbit() )
|
||||
new |= (1 << 9);
|
||||
|
||||
/*
|
||||
* Erratum #665, doc 44739. Integer divide instructions may cause
|
||||
* unpredictable behaviour.
|
||||
*/
|
||||
if ( c->family == 0x12 )
|
||||
new |= 1U << 31;
|
||||
|
||||
/* Avoid reading DE_CFG if we don't intend to change anything. */
|
||||
if ( !new )
|
||||
return;
|
||||
@@ -1201,15 +1208,6 @@ static void cf_check 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))) {
|
||||
if (c == &boot_cpu_data || opt_cpu_info)
|
||||
printk_once(XENLOG_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. */
|
||||
|
||||