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:
Andrew Cooper committed 2026-01-27 13:59:12 +00:00
1 parent 3a814060bb
commit f49bbd301b
1 file changed
+7 -9
+7 -9
View File
@@ -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. */
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.