Author: kib
Date: Tue May 21 22:56:21 2019
New Revision: 348075
URL: https://svnweb.freebsd.org/changeset/base/348075
Log:
Do not call hw_mds_recalculate() from initializecpu().
If MDS mitigation is enabled by the tunable but MDS microcode is not
early-loaded, software mitigation is selected. This causes
initializecpu() to try to allocate memory which makes boot process
very unhappy.
Create SYSINIT that runs sufficiently late to succeed.
Reported by: naddy
PR: 237968
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Modified:
head/sys/amd64/amd64/initcpu.c
head/sys/i386/i386/initcpu.c
head/sys/x86/x86/cpu_machdep.c
Modified: head/sys/amd64/amd64/initcpu.c
==============================================================================
--- head/sys/amd64/amd64/initcpu.c Tue May 21 22:24:38 2019
(r348074)
+++ head/sys/amd64/amd64/initcpu.c Tue May 21 22:56:21 2019
(r348075)
@@ -257,7 +257,6 @@ initializecpu(void)
hw_ibrs_recalculate();
hw_ssb_recalculate(false);
amd64_syscall_ret_flush_l1d_recalc();
- hw_mds_recalculate();
switch (cpu_vendor_id) {
case CPU_VENDOR_AMD:
init_amd();
Modified: head/sys/i386/i386/initcpu.c
==============================================================================
--- head/sys/i386/i386/initcpu.c Tue May 21 22:24:38 2019
(r348074)
+++ head/sys/i386/i386/initcpu.c Tue May 21 22:56:21 2019
(r348075)
@@ -749,7 +749,6 @@ initializecpu(void)
msr = rdmsr(MSR_EFER) | EFER_NXE;
wrmsr(MSR_EFER, msr);
}
- hw_mds_recalculate();
if ((amd_feature & AMDID_RDTSCP) != 0 ||
(cpu_stdext_feature2 & CPUID_STDEXT2_RDPID) != 0)
wrmsr(MSR_TSC_AUX, PCPU_GET(cpuid));
Modified: head/sys/x86/x86/cpu_machdep.c
==============================================================================
--- head/sys/x86/x86/cpu_machdep.c Tue May 21 22:24:38 2019
(r348074)
+++ head/sys/x86/x86/cpu_machdep.c Tue May 21 22:56:21 2019
(r348075)
@@ -1106,6 +1106,14 @@ hw_mds_recalculate(void)
}
}
+static void
+hw_mds_recalculate_boot(void *arg __unused)
+{
+
+ hw_mds_recalculate();
+}
+SYSINIT(mds_recalc, SI_SUB_SMP, SI_ORDER_ANY, hw_mds_recalculate_boot, NULL);
+
static int
sysctl_mds_disable_handler(SYSCTL_HANDLER_ARGS)
{
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"