3737#include "cpu.h"
3838
3939static void __init spectre_v1_select_mitigation (void );
40- static void __init retbleed_select_mitigation (void );
4140static void __init spectre_v2_select_mitigation (void );
41+ static void __init retbleed_select_mitigation (void );
42+ static void __init spectre_v2_user_select_mitigation (void );
4243static void __init ssb_select_mitigation (void );
4344static void __init l1tf_select_mitigation (void );
4445static void __init mds_select_mitigation (void );
@@ -145,13 +146,19 @@ void __init check_bugs(void)
145146
146147 /* Select the proper CPU mitigations before patching alternatives: */
147148 spectre_v1_select_mitigation ();
149+ spectre_v2_select_mitigation ();
150+ /*
151+ * retbleed_select_mitigation() relies on the state set by
152+ * spectre_v2_select_mitigation(); specifically it wants to know about
153+ * spectre_v2=ibrs.
154+ */
148155 retbleed_select_mitigation ();
149156 /*
150- * spectre_v2_select_mitigation () relies on the state set by
157+ * spectre_v2_user_select_mitigation () relies on the state set by
151158 * retbleed_select_mitigation(); specifically the STIBP selection is
152159 * forced for UNRET.
153160 */
154- spectre_v2_select_mitigation ();
161+ spectre_v2_user_select_mitigation ();
155162 ssb_select_mitigation ();
156163 l1tf_select_mitigation ();
157164 md_clear_select_mitigation ();
@@ -1013,13 +1020,15 @@ static void __init spec_v2_user_print_cond(const char *reason, bool secure)
10131020 pr_info ("spectre_v2_user=%s forced on command line.\n" , reason );
10141021}
10151022
1023+ static __ro_after_init enum spectre_v2_mitigation_cmd spectre_v2_cmd ;
1024+
10161025static enum spectre_v2_user_cmd __init
1017- spectre_v2_parse_user_cmdline (enum spectre_v2_mitigation_cmd v2_cmd )
1026+ spectre_v2_parse_user_cmdline (void )
10181027{
10191028 char arg [20 ];
10201029 int ret , i ;
10211030
1022- switch (v2_cmd ) {
1031+ switch (spectre_v2_cmd ) {
10231032 case SPECTRE_V2_CMD_NONE :
10241033 return SPECTRE_V2_USER_CMD_NONE ;
10251034 case SPECTRE_V2_CMD_FORCE :
@@ -1054,7 +1063,7 @@ static inline bool spectre_v2_in_ibrs_mode(enum spectre_v2_mitigation mode)
10541063}
10551064
10561065static void __init
1057- spectre_v2_user_select_mitigation (enum spectre_v2_mitigation_cmd v2_cmd )
1066+ spectre_v2_user_select_mitigation (void )
10581067{
10591068 enum spectre_v2_user_mitigation mode = SPECTRE_V2_USER_NONE ;
10601069 bool smt_possible = IS_ENABLED (CONFIG_SMP );
@@ -1067,7 +1076,7 @@ spectre_v2_user_select_mitigation(enum spectre_v2_mitigation_cmd v2_cmd)
10671076 cpu_smt_control == CPU_SMT_NOT_SUPPORTED )
10681077 smt_possible = false;
10691078
1070- cmd = spectre_v2_parse_user_cmdline (v2_cmd );
1079+ cmd = spectre_v2_parse_user_cmdline ();
10711080 switch (cmd ) {
10721081 case SPECTRE_V2_USER_CMD_NONE :
10731082 goto set_mode ;
@@ -1391,7 +1400,7 @@ static void __init spectre_v2_select_mitigation(void)
13911400 }
13921401
13931402 /* Set up IBPB and STIBP depending on the general spectre V2 command */
1394- spectre_v2_user_select_mitigation ( cmd ) ;
1403+ spectre_v2_cmd = cmd ;
13951404}
13961405
13971406static void update_stibp_msr (void * __unused )
0 commit comments