tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: b6fc3fddade7a194bd141a49f2689e50f796ef46 commit: b9b81e1e93820eb47aeaf0fe7cdda535adf8e7a4 [3041/6121] net/mlx5: DR, For short chains of STEs, avoid allocating ste_arr dynamically config: powerpc-randconfig-c003-20221107 compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 7aa90b21b453d1ca52fdfccfd7e01e61d9e5b1f1) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install powerpc cross compiling tool for clang build # apt-get install binutils-powerpc-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=b9b81e1e93820eb47aeaf0fe7cdda535adf8e7a4 git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git git fetch --no-tags linux-next master git checkout b9b81e1e93820eb47aeaf0fe7cdda535adf8e7a4 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=powerpc SHELL=/bin/bash drivers/net/ethernet/mellanox/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot All warnings (new ones prefixed by >>): >> drivers/net/ethernet/mellanox/mlx5/core/steering/dr_rule.c:1087:1: warning: stack frame size (1184) exceeds limit (1024) in 'dr_rule_create_rule_nic' [-Wframe-larger-than] dr_rule_create_rule_nic(struct mlx5dr_rule *rule, ^ 352/1184 (29.73%) spills, 832/1184 (70.27%) variables 1 warning generated. vim +/dr_rule_create_rule_nic +1087 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_rule.c 41d07074154c67 Alex Vesker 2019-08-19 1085 41d07074154c67 Alex Vesker 2019-08-19 1086 static int 41d07074154c67 Alex Vesker 2019-08-19 @1087 dr_rule_create_rule_nic(struct mlx5dr_rule *rule, 41d07074154c67 Alex Vesker 2019-08-19 1088 struct mlx5dr_rule_rx_tx *nic_rule, 41d07074154c67 Alex Vesker 2019-08-19 1089 struct mlx5dr_match_param *param, 41d07074154c67 Alex Vesker 2019-08-19 1090 size_t num_actions, 41d07074154c67 Alex Vesker 2019-08-19 1091 struct mlx5dr_action *actions[]) 41d07074154c67 Alex Vesker 2019-08-19 1092 { b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1093 u8 hw_ste_arr_optimized[DR_RULE_MAX_STE_CHAIN_OPTIMIZED * DR_STE_SIZE] = {}; 41d07074154c67 Alex Vesker 2019-08-19 1094 struct mlx5dr_ste_send_info *ste_info, *tmp_ste_info; 41d07074154c67 Alex Vesker 2019-08-19 1095 struct mlx5dr_matcher *matcher = rule->matcher; 41d07074154c67 Alex Vesker 2019-08-19 1096 struct mlx5dr_domain *dmn = matcher->tbl->dmn; 41d07074154c67 Alex Vesker 2019-08-19 1097 struct mlx5dr_matcher_rx_tx *nic_matcher; 41d07074154c67 Alex Vesker 2019-08-19 1098 struct mlx5dr_domain_rx_tx *nic_dmn; 41d07074154c67 Alex Vesker 2019-08-19 1099 struct mlx5dr_ste_htbl *htbl = NULL; 41d07074154c67 Alex Vesker 2019-08-19 1100 struct mlx5dr_ste_htbl *cur_htbl; 41d07074154c67 Alex Vesker 2019-08-19 1101 struct mlx5dr_ste *ste = NULL; 41d07074154c67 Alex Vesker 2019-08-19 1102 LIST_HEAD(send_ste_list); b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1103 bool hw_ste_arr_is_opt; 41d07074154c67 Alex Vesker 2019-08-19 1104 u8 *hw_ste_arr = NULL; 41d07074154c67 Alex Vesker 2019-08-19 1105 u32 new_hw_ste_arr_sz; 41d07074154c67 Alex Vesker 2019-08-19 1106 int ret, i; 41d07074154c67 Alex Vesker 2019-08-19 1107 41d07074154c67 Alex Vesker 2019-08-19 1108 nic_matcher = nic_rule->nic_matcher; 41d07074154c67 Alex Vesker 2019-08-19 1109 nic_dmn = nic_matcher->nic_tbl->nic_dmn; 41d07074154c67 Alex Vesker 2019-08-19 1110 46f2a8ae8a7008 Yevgeny Kliteynik 2021-07-04 1111 if (dr_rule_skip(dmn->type, nic_dmn->type, &matcher->mask, param, 01723919675dfa Hamdan Igbaria 2020-06-15 1112 rule->flow_source)) 41d07074154c67 Alex Vesker 2019-08-19 1113 return 0; 41d07074154c67 Alex Vesker 2019-08-19 1114 b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1115 ret = mlx5dr_matcher_select_builders(matcher, b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1116 nic_matcher, b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1117 dr_rule_get_ipv(¶m->outer), b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1118 dr_rule_get_ipv(¶m->inner)); b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1119 if (ret) b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1120 return ret; b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1121 b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1122 hw_ste_arr_is_opt = nic_matcher->num_of_builders <= DR_RULE_MAX_STES_OPTIMIZED; b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1123 if (likely(hw_ste_arr_is_opt)) { b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1124 hw_ste_arr = hw_ste_arr_optimized; b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1125 } else { b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1126 hw_ste_arr = kzalloc((nic_matcher->num_of_builders + DR_ACTION_MAX_STES) * b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1127 DR_STE_SIZE, GFP_KERNEL); b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1128 ed03a418abe8e5 Alex Vesker 2020-05-20 1129 if (!hw_ste_arr) ed03a418abe8e5 Alex Vesker 2020-05-20 1130 return -ENOMEM; b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1131 } ed03a418abe8e5 Alex Vesker 2020-05-20 1132 ed03a418abe8e5 Alex Vesker 2020-05-20 1133 mlx5dr_domain_nic_lock(nic_dmn); ed03a418abe8e5 Alex Vesker 2020-05-20 1134 cc2295cd54e483 Yevgeny Kliteynik 2021-10-14 1135 ret = mlx5dr_matcher_add_to_tbl_nic(dmn, nic_matcher); cc2295cd54e483 Yevgeny Kliteynik 2021-10-14 1136 if (ret) cc2295cd54e483 Yevgeny Kliteynik 2021-10-14 1137 goto free_hw_ste; cc2295cd54e483 Yevgeny Kliteynik 2021-10-14 1138 41d07074154c67 Alex Vesker 2019-08-19 1139 /* Set the tag values inside the ste array */ 41d07074154c67 Alex Vesker 2019-08-19 1140 ret = mlx5dr_ste_build_ste_arr(matcher, nic_matcher, param, hw_ste_arr); 41d07074154c67 Alex Vesker 2019-08-19 1141 if (ret) cc2295cd54e483 Yevgeny Kliteynik 2021-10-14 1142 goto remove_from_nic_tbl; 41d07074154c67 Alex Vesker 2019-08-19 1143 41d07074154c67 Alex Vesker 2019-08-19 1144 /* Set the actions values/addresses inside the ste array */ 41d07074154c67 Alex Vesker 2019-08-19 1145 ret = mlx5dr_actions_build_ste_arr(matcher, nic_matcher, actions, 41d07074154c67 Alex Vesker 2019-08-19 1146 num_actions, hw_ste_arr, 41d07074154c67 Alex Vesker 2019-08-19 1147 &new_hw_ste_arr_sz); 41d07074154c67 Alex Vesker 2019-08-19 1148 if (ret) cc2295cd54e483 Yevgeny Kliteynik 2021-10-14 1149 goto remove_from_nic_tbl; 41d07074154c67 Alex Vesker 2019-08-19 1150 41d07074154c67 Alex Vesker 2019-08-19 1151 cur_htbl = nic_matcher->s_htbl; 41d07074154c67 Alex Vesker 2019-08-19 1152 41d07074154c67 Alex Vesker 2019-08-19 1153 /* Go over the array of STEs, and build dr_ste accordingly. 41d07074154c67 Alex Vesker 2019-08-19 1154 * The loop is over only the builders which are equal or less to the 41d07074154c67 Alex Vesker 2019-08-19 1155 * number of stes, in case we have actions that lives in other stes. 41d07074154c67 Alex Vesker 2019-08-19 1156 */ 41d07074154c67 Alex Vesker 2019-08-19 1157 for (i = 0; i < nic_matcher->num_of_builders; i++) { 41d07074154c67 Alex Vesker 2019-08-19 1158 /* Calculate CRC and keep new ste entry */ 41d07074154c67 Alex Vesker 2019-08-19 1159 u8 *cur_hw_ste_ent = hw_ste_arr + (i * DR_STE_SIZE); 41d07074154c67 Alex Vesker 2019-08-19 1160 41d07074154c67 Alex Vesker 2019-08-19 1161 ste = dr_rule_handle_ste_branch(rule, 41d07074154c67 Alex Vesker 2019-08-19 1162 nic_rule, 41d07074154c67 Alex Vesker 2019-08-19 1163 &send_ste_list, 41d07074154c67 Alex Vesker 2019-08-19 1164 cur_htbl, 41d07074154c67 Alex Vesker 2019-08-19 1165 cur_hw_ste_ent, 41d07074154c67 Alex Vesker 2019-08-19 1166 i + 1, 41d07074154c67 Alex Vesker 2019-08-19 1167 &htbl); 41d07074154c67 Alex Vesker 2019-08-19 1168 if (!ste) { 41d07074154c67 Alex Vesker 2019-08-19 1169 mlx5dr_err(dmn, "Failed creating next branch\n"); 41d07074154c67 Alex Vesker 2019-08-19 1170 ret = -ENOENT; 41d07074154c67 Alex Vesker 2019-08-19 1171 goto free_rule; 41d07074154c67 Alex Vesker 2019-08-19 1172 } 41d07074154c67 Alex Vesker 2019-08-19 1173 41d07074154c67 Alex Vesker 2019-08-19 1174 cur_htbl = ste->next_htbl; 41d07074154c67 Alex Vesker 2019-08-19 1175 41d07074154c67 Alex Vesker 2019-08-19 1176 mlx5dr_ste_get(ste); 8a015baef50a7b Yevgeny Kliteynik 2021-07-08 1177 mlx5dr_rule_set_last_member(nic_rule, ste, true); 41d07074154c67 Alex Vesker 2019-08-19 1178 } 41d07074154c67 Alex Vesker 2019-08-19 1179 41d07074154c67 Alex Vesker 2019-08-19 1180 /* Connect actions */ 41d07074154c67 Alex Vesker 2019-08-19 1181 ret = dr_rule_handle_action_stes(rule, nic_rule, &send_ste_list, 41d07074154c67 Alex Vesker 2019-08-19 1182 ste, hw_ste_arr, new_hw_ste_arr_sz); 41d07074154c67 Alex Vesker 2019-08-19 1183 if (ret) { 41d07074154c67 Alex Vesker 2019-08-19 1184 mlx5dr_dbg(dmn, "Failed apply actions\n"); 41d07074154c67 Alex Vesker 2019-08-19 1185 goto free_rule; 41d07074154c67 Alex Vesker 2019-08-19 1186 } 41d07074154c67 Alex Vesker 2019-08-19 1187 ret = dr_rule_send_update_list(&send_ste_list, dmn, true); 41d07074154c67 Alex Vesker 2019-08-19 1188 if (ret) { 41d07074154c67 Alex Vesker 2019-08-19 1189 mlx5dr_err(dmn, "Failed sending ste!\n"); 41d07074154c67 Alex Vesker 2019-08-19 1190 goto free_rule; 41d07074154c67 Alex Vesker 2019-08-19 1191 } 41d07074154c67 Alex Vesker 2019-08-19 1192 41d07074154c67 Alex Vesker 2019-08-19 1193 if (htbl) 41d07074154c67 Alex Vesker 2019-08-19 1194 mlx5dr_htbl_put(htbl); 41d07074154c67 Alex Vesker 2019-08-19 1195 cc2295cd54e483 Yevgeny Kliteynik 2021-10-14 1196 nic_matcher->rules++; cc2295cd54e483 Yevgeny Kliteynik 2021-10-14 1197 ed03a418abe8e5 Alex Vesker 2020-05-20 1198 mlx5dr_domain_nic_unlock(nic_dmn); ed03a418abe8e5 Alex Vesker 2020-05-20 1199 b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1200 if (unlikely(!hw_ste_arr_is_opt)) 260986fcff81a0 Alex Vesker 2019-10-29 1201 kfree(hw_ste_arr); 260986fcff81a0 Alex Vesker 2019-10-29 1202 41d07074154c67 Alex Vesker 2019-08-19 1203 return 0; 41d07074154c67 Alex Vesker 2019-08-19 1204 41d07074154c67 Alex Vesker 2019-08-19 1205 free_rule: 41d07074154c67 Alex Vesker 2019-08-19 1206 dr_rule_clean_rule_members(rule, nic_rule); 41d07074154c67 Alex Vesker 2019-08-19 1207 /* Clean all ste_info's */ 41d07074154c67 Alex Vesker 2019-08-19 1208 list_for_each_entry_safe(ste_info, tmp_ste_info, &send_ste_list, send_list) { 41d07074154c67 Alex Vesker 2019-08-19 1209 list_del(&ste_info->send_list); 41d07074154c67 Alex Vesker 2019-08-19 1210 kfree(ste_info); 41d07074154c67 Alex Vesker 2019-08-19 1211 } cc2295cd54e483 Yevgeny Kliteynik 2021-10-14 1212 cc2295cd54e483 Yevgeny Kliteynik 2021-10-14 1213 remove_from_nic_tbl: cc2295cd54e483 Yevgeny Kliteynik 2021-10-14 1214 mlx5dr_matcher_remove_from_tbl_nic(dmn, nic_matcher); cc2295cd54e483 Yevgeny Kliteynik 2021-10-14 1215 41d07074154c67 Alex Vesker 2019-08-19 1216 free_hw_ste: ed03a418abe8e5 Alex Vesker 2020-05-20 1217 mlx5dr_domain_nic_unlock(nic_dmn); b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1218 b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1219 if (unlikely(!hw_ste_arr_is_opt)) 41d07074154c67 Alex Vesker 2019-08-19 1220 kfree(hw_ste_arr); b9b81e1e93820e Yevgeny Kliteynik 2022-03-29 1221 41d07074154c67 Alex Vesker 2019-08-19 1222 return ret; 41d07074154c67 Alex Vesker 2019-08-19 1223 } 41d07074154c67 Alex Vesker 2019-08-19 1224 :::::: The code at line 1087 was first introduced by commit :::::: 41d07074154c67a587b12d2b8a8cec3707e51eb7 net/mlx5: DR, Expose steering rule functionality :::::: TO: Alex Vesker :::::: CC: Saeed Mahameed -- 0-DAY CI Kernel Test Service https://01.org/lkp