aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2023-03-28 23:51:44 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2023-03-29 18:45:20 +0000
commitcd137909c3097fe223ce2b49075eed42a4933bb5 (patch)
treefa84a0b0042f6682836defe046ec907ce18eea4e /sys
parent4dc3b1fa1bbcf20f7713d94776a1604964ada32b (diff)
downloadsrc-cd137909c3097fe223ce2b49075eed42a4933bb5.tar.gz
src-cd137909c3097fe223ce2b49075eed42a4933bb5.zip
amd64 wakeup: recalculate mitigations after APICs are woken
APICs are needed to broadcast IPIs for MSR writes. PR: 270489 Reviewed by: dchagin, emaste, jhb Tested by: dchagin, manu Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D39302
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/acpica/acpi_wakeup.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/amd64/acpica/acpi_wakeup.c b/sys/amd64/acpica/acpi_wakeup.c
index 3df4457550d6..62e11f5797f6 100644
--- a/sys/amd64/acpica/acpi_wakeup.c
+++ b/sys/amd64/acpica/acpi_wakeup.c
@@ -294,19 +294,21 @@ acpi_wakeup_machdep(struct acpi_softc *sc, int state, int sleep_result,
* 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();
- x86_rngds_mitg_recalculate(true);
mca_resume();
if (vmm_resume_p != NULL)
vmm_resume_p();
intr_resume(/*suspend_cancelled*/false);
+ hw_ibrs_recalculate(true);
+ amd64_syscall_ret_flush_l1d_recalc();
+ hw_ssb_recalculate(true);
+ x86_rngds_mitg_recalculate(true);
+
AcpiSetFirmwareWakingVector(0, 0);
} else {
/* Wakeup MD procedures in interrupt enabled context */