Hi Pedro, [FYI, it's a private test report for your RFC patch.] [auto build test WARNING on net-next/master] url: https://github.com/intel-lab-lkp/linux/commits/Pedro-Tammela/net-sched-retpoline-wrappers-for-tc/20221126-015431 patch link: https://lore.kernel.org/r/20221125175207.473866-3-pctammela%40mojatatu.com patch subject: [PATCH RFC net-next 2/3] net/sched: avoid indirect act functions on retpoline kernels config: m68k-allyesconfig compiler: m68k-linux-gcc (GCC) 12.1.0 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 # https://github.com/intel-lab-lkp/linux/commit/9f6e971c9c4bb61fe3b784f5ca792e8d1d8ea445 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Pedro-Tammela/net-sched-retpoline-wrappers-for-tc/20221126-015431 git checkout 9f6e971c9c4bb61fe3b784f5ca792e8d1d8ea445 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=m68k SHELL=/bin/bash net/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot All warnings (new ones prefixed by >>): net/sched/act_ct.c:1041:18: error: expected ';' before 'int' 1041 | TC_INDIRECT_SCOPE int tcf_ct_act(struct sk_buff *skb, const struct tc_action *a, | ^~~~ | ; >> net/sched/act_ct.c:1041:23: warning: no previous prototype for 'tcf_ct_act' [-Wmissing-prototypes] 1041 | TC_INDIRECT_SCOPE int tcf_ct_act(struct sk_buff *skb, const struct tc_action *a, | ^~~~~~~~~~ vim +/tcf_ct_act +1041 net/sched/act_ct.c 1040 > 1041 TC_INDIRECT_SCOPE int tcf_ct_act(struct sk_buff *skb, const struct tc_action *a, 1042 struct tcf_result *res) 1043 { 1044 struct net *net = dev_net(skb->dev); 1045 enum ip_conntrack_info ctinfo; 1046 struct tcf_ct *c = to_ct(a); 1047 struct nf_conn *tmpl = NULL; 1048 struct nf_hook_state state; 1049 bool cached, commit, clear; 1050 int nh_ofs, err, retval; 1051 struct tcf_ct_params *p; 1052 bool add_helper = false; 1053 bool skip_add = false; 1054 bool defrag = false; 1055 struct nf_conn *ct; 1056 u8 family; 1057 1058 p = rcu_dereference_bh(c->params); 1059 1060 retval = READ_ONCE(c->tcf_action); 1061 commit = p->ct_action & TCA_CT_ACT_COMMIT; 1062 clear = p->ct_action & TCA_CT_ACT_CLEAR; 1063 tmpl = p->tmpl; 1064 1065 tcf_lastuse_update(&c->tcf_tm); 1066 tcf_action_update_bstats(&c->common, skb); 1067 1068 if (clear) { 1069 tc_skb_cb(skb)->post_ct = false; 1070 ct = nf_ct_get(skb, &ctinfo); 1071 if (ct) { 1072 nf_ct_put(ct); 1073 nf_ct_set(skb, NULL, IP_CT_UNTRACKED); 1074 } 1075 1076 goto out_clear; 1077 } 1078 1079 family = tcf_ct_skb_nf_family(skb); 1080 if (family == NFPROTO_UNSPEC) 1081 goto drop; 1082 1083 /* The conntrack module expects to be working at L3. 1084 * We also try to pull the IPv4/6 header to linear area 1085 */ 1086 nh_ofs = skb_network_offset(skb); 1087 skb_pull_rcsum(skb, nh_ofs); 1088 err = tcf_ct_handle_fragments(net, skb, family, p->zone, &defrag); 1089 if (err == -EINPROGRESS) { 1090 retval = TC_ACT_STOLEN; 1091 goto out_clear; 1092 } 1093 if (err) 1094 goto drop; 1095 1096 err = tcf_ct_skb_network_trim(skb, family); 1097 if (err) 1098 goto drop; 1099 1100 /* If we are recirculating packets to match on ct fields and 1101 * committing with a separate ct action, then we don't need to 1102 * actually run the packet through conntrack twice unless it's for a 1103 * different zone. 1104 */ 1105 cached = tcf_ct_skb_nfct_cached(net, skb, p); 1106 if (!cached) { 1107 if (tcf_ct_flow_table_lookup(p, skb, family)) { 1108 skip_add = true; 1109 goto do_nat; 1110 } 1111 1112 /* Associate skb with specified zone. */ 1113 if (tmpl) { 1114 nf_conntrack_put(skb_nfct(skb)); 1115 nf_conntrack_get(&tmpl->ct_general); 1116 nf_ct_set(skb, tmpl, IP_CT_NEW); 1117 } 1118 1119 state.hook = NF_INET_PRE_ROUTING; 1120 state.net = net; 1121 state.pf = family; 1122 err = nf_conntrack_in(skb, &state); 1123 if (err != NF_ACCEPT) 1124 goto out_push; 1125 } 1126 1127 do_nat: 1128 ct = nf_ct_get(skb, &ctinfo); 1129 if (!ct) 1130 goto out_push; 1131 nf_ct_deliver_cached_events(ct); 1132 nf_conn_act_ct_ext_fill(skb, ct, ctinfo); 1133 1134 err = tcf_ct_act_nat(skb, ct, ctinfo, p->ct_action, &p->range, commit); 1135 if (err != NF_ACCEPT) 1136 goto drop; 1137 1138 if (!nf_ct_is_confirmed(ct) && commit && p->helper && !nfct_help(ct)) { 1139 err = __nf_ct_try_assign_helper(ct, p->tmpl, GFP_ATOMIC); 1140 if (err) 1141 goto drop; 1142 add_helper = true; 1143 if (p->ct_action & TCA_CT_ACT_NAT && !nfct_seqadj(ct)) { 1144 if (!nfct_seqadj_ext_add(ct)) 1145 goto drop; 1146 } 1147 } 1148 1149 if (nf_ct_is_confirmed(ct) ? ((!cached && !skip_add) || add_helper) : commit) { 1150 if (nf_ct_helper(skb, ct, ctinfo, family) != NF_ACCEPT) 1151 goto drop; 1152 } 1153 1154 if (commit) { 1155 tcf_ct_act_set_mark(ct, p->mark, p->mark_mask); 1156 tcf_ct_act_set_labels(ct, p->labels, p->labels_mask); 1157 1158 if (!nf_ct_is_confirmed(ct)) 1159 nf_conn_act_ct_ext_add(ct); 1160 1161 /* This will take care of sending queued events 1162 * even if the connection is already confirmed. 1163 */ 1164 if (nf_conntrack_confirm(skb) != NF_ACCEPT) 1165 goto drop; 1166 } 1167 1168 if (!skip_add) 1169 tcf_ct_flow_table_process_conn(p->ct_ft, ct, ctinfo); 1170 1171 out_push: 1172 skb_push_rcsum(skb, nh_ofs); 1173 1174 tc_skb_cb(skb)->post_ct = true; 1175 tc_skb_cb(skb)->zone = p->zone; 1176 out_clear: 1177 if (defrag) 1178 qdisc_skb_cb(skb)->pkt_len = skb->len; 1179 return retval; 1180 1181 drop: 1182 tcf_action_inc_drop_qstats(&c->common); 1183 return TC_ACT_SHOT; 1184 } 1185 -- 0-DAY CI Kernel Test Service https://01.org/lkp