aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2023-03-28 23:51:44 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2023-03-30 12:35:53 +0000
commit878cd9623c8eaa747ec27269fec968b33b153e1d (patch)
tree801c9d9483f89d8f19d0a8c7519942b4dd5998bc
parent57472c9a30abce230797fcf1e9435fb603d7425e (diff)
downloadsrc-878cd9623c8eaa747ec27269fec968b33b153e1d.tar.gz
src-878cd9623c8eaa747ec27269fec968b33b153e1d.zip
amd64 wakeup: recalculate mitigations after APICs are woken
PR: 270489 Approved by: re (cperciva) (cherry picked from commit cd137909c3097fe223ce2b49075eed42a4933bb5) (cherry picked from commit 738b20a47f7379b27ccf7a6d2af2c1bbfa11d05f)
-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 */