diff --git a/sys/amd64/acpica/acpi_wakeup.c b/sys/amd64/acpica/acpi_wakeup.c --- a/sys/amd64/acpica/acpi_wakeup.c +++ b/sys/amd64/acpica/acpi_wakeup.c @@ -289,24 +289,26 @@ resume_cpus(suspcpus); #endif + identify_cpu_ext_features(); + + mca_resume(); + if (vmm_resume_p != NULL) + vmm_resume_p(); + intr_resume(/*suspend_cancelled*/false); + /* * Re-read cpu_stdext_feature3, which was zeroed-out * in acpi_sleep_machdep(), after the microcode was * reloaded. Then recalculate the active mitigation * knobs that depend on the microcode and - * cpu_stdext_feature3. + * cpu_stdext_feature3. Do it after LAPICs are woken, + * so that IPIs work. */ - identify_cpu_ext_features(); hw_ibrs_recalculate(true); - hw_ssb_recalculate(true); amd64_syscall_ret_flush_l1d_recalc(); + hw_ssb_recalculate(true); x86_rngds_mitg_recalculate(true); - mca_resume(); - if (vmm_resume_p != NULL) - vmm_resume_p(); - intr_resume(/*suspend_cancelled*/false); - AcpiSetFirmwareWakingVector(0, 0); } else { /* Wakeup MD procedures in interrupt enabled context */