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
This commit is contained in:
parent
bfc5d3f9c2
commit
48ec6d3bc9
@ -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();
|
||||
|
@ -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));
|
||||
|
@ -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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user