]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
x86/srso: Remove 'pred_cmd' label
authorJosh Poimboeuf <jpoimboe@kernel.org>
Tue, 5 Sep 2023 05:04:57 +0000 (22:04 -0700)
committerBorislav Petkov (AMD) <bp@alien8.de>
Fri, 20 Oct 2023 10:26:59 +0000 (12:26 +0200)
SBPB is only enabled in two distinct cases:

1) when SRSO has been disabled with srso=off

2) when SRSO has been fixed (in future HW)

Simplify the control flow by getting rid of the 'pred_cmd' label and
moving the SBPB enablement check to the two corresponding code sites.
This makes it more clear when exactly SBPB gets enabled.

Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Acked-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/bb20e8569cfa144def5e6f25e610804bc4974de2.1693889988.git.jpoimboe@kernel.org
arch/x86/kernel/cpu/bugs.c

index e45dd69aff7f53516d5bc4f22317b6586dd65ae2..4f1ad2350f4989d344a7091441f3bcad613acfde 100644 (file)
@@ -2410,13 +2410,21 @@ static void __init srso_select_mitigation(void)
 {
        bool has_microcode = boot_cpu_has(X86_FEATURE_IBPB_BRTYPE);
 
-       if (!boot_cpu_has_bug(X86_BUG_SRSO) || cpu_mitigations_off())
-               goto pred_cmd;
+       if (cpu_mitigations_off())
+               return;
+
+       if (!boot_cpu_has_bug(X86_BUG_SRSO)) {
+               if (boot_cpu_has(X86_FEATURE_SBPB))
+                       x86_pred_cmd = PRED_CMD_SBPB;
+               return;
+       }
 
        if (has_microcode) {
                /*
                 * Zen1/2 with SMT off aren't vulnerable after the right
                 * IBPB microcode has been applied.
+                *
+                * Zen1/2 don't have SBPB, no need to try to enable it here.
                 */
                if (boot_cpu_data.x86 < 0x19 && !cpu_smt_possible()) {
                        setup_force_cpu_cap(X86_FEATURE_SRSO_NO);
@@ -2439,7 +2447,9 @@ static void __init srso_select_mitigation(void)
 
        switch (srso_cmd) {
        case SRSO_CMD_OFF:
-               goto pred_cmd;
+               if (boot_cpu_has(X86_FEATURE_SBPB))
+                       x86_pred_cmd = PRED_CMD_SBPB;
+               return;
 
        case SRSO_CMD_MICROCODE:
                if (has_microcode) {
@@ -2501,11 +2511,6 @@ static void __init srso_select_mitigation(void)
 
 out:
        pr_info("%s\n", srso_strings[srso_mitigation]);
-
-pred_cmd:
-       if ((!boot_cpu_has_bug(X86_BUG_SRSO) || srso_cmd == SRSO_CMD_OFF) &&
-            boot_cpu_has(X86_FEATURE_SBPB))
-               x86_pred_cmd = PRED_CMD_SBPB;
 }
 
 #undef pr_fmt