git: cd137909c309 - main - amd64 wakeup: recalculate mitigations after APICs are woken

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Wed, 29 Mar 2023 18:45:55 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=cd137909c3097fe223ce2b49075eed42a4933bb5

commit cd137909c3097fe223ce2b49075eed42a4933bb5
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2023-03-28 23:51:44 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2023-03-29 18:45:20 +0000

    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
---
 sys/amd64/acpica/acpi_wakeup.c | 12 +++++++-----
 1 file 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 */