[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <202601170903.keV6lwyg-lkp@intel.com>
Date: Sat, 17 Jan 2026 10:05:15 +0800
From: kernel test robot <lkp@...el.com>
To: Eric Dumazet <edumazet@...gle.com>,
"David S . Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>
Cc: oe-kbuild-all@...ts.linux.dev, Simon Horman <horms@...nel.org>,
netdev@...r.kernel.org, Willem de Bruijn <willemb@...gle.com>,
Kuniyuki Iwashima <kuniyu@...gle.com>, eric.dumazet@...il.com,
Eric Dumazet <edumazet@...gle.com>
Subject: Re: [PATCH net-next 2/3] gro: inline tcp6_gro_receive()
Hi Eric,
kernel test robot noticed the following build warnings:
[auto build test WARNING on net-next/main]
url: https://github.com/intel-lab-lkp/linux/commits/Eric-Dumazet/net-always-inline-__skb_incr_checksum_unnecessary/20260116-233745
base: net-next/main
patch link: https://lore.kernel.org/r/20260116152957.1825626-3-edumazet%40google.com
patch subject: [PATCH net-next 2/3] gro: inline tcp6_gro_receive()
config: i386-randconfig-015-20260117 (https://download.01.org/0day-ci/archive/20260117/202601170903.keV6lwyg-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.4.0-5) 12.4.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260117/202601170903.keV6lwyg-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202601170903.keV6lwyg-lkp@intel.com/
All warnings (new ones prefixed by >>):
net/ipv6/ip6_offload.c: In function 'ipv6_gro_receive':
net/ipv6/ip6_offload.c:304:22: error: implicit declaration of function 'udp6_gro_receive'; did you mean 'udp_gro_receive'? [-Werror=implicit-function-declaration]
304 | pp = udp6_gro_receive(head, skb);
| ^~~~~~~~~~~~~~~~
| udp_gro_receive
>> net/ipv6/ip6_offload.c:304:20: warning: assignment to 'struct sk_buff *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
304 | pp = udp6_gro_receive(head, skb);
| ^
cc1: some warnings being treated as errors
vim +304 net/ipv6/ip6_offload.c
215
216 INDIRECT_CALLABLE_SCOPE struct sk_buff *ipv6_gro_receive(struct list_head *head,
217 struct sk_buff *skb)
218 {
219 const struct net_offload *ops;
220 struct sk_buff *pp = NULL;
221 struct sk_buff *p;
222 struct ipv6hdr *iph;
223 unsigned int nlen;
224 unsigned int hlen;
225 unsigned int off;
226 u16 flush = 1;
227 int proto;
228
229 off = skb_gro_offset(skb);
230 hlen = off + sizeof(*iph);
231 iph = skb_gro_header(skb, hlen, off);
232 if (unlikely(!iph))
233 goto out;
234
235 NAPI_GRO_CB(skb)->network_offsets[NAPI_GRO_CB(skb)->encap_mark] = off;
236
237 flush += ntohs(iph->payload_len) != skb->len - hlen;
238
239 proto = iph->nexthdr;
240 ops = rcu_dereference(inet6_offloads[proto]);
241 if (!ops || !ops->callbacks.gro_receive) {
242 proto = ipv6_gro_pull_exthdrs(skb, hlen, proto);
243
244 ops = rcu_dereference(inet6_offloads[proto]);
245 if (!ops || !ops->callbacks.gro_receive)
246 goto out;
247
248 iph = skb_gro_network_header(skb);
249 } else {
250 skb_gro_pull(skb, sizeof(*iph));
251 }
252
253 skb_set_transport_header(skb, skb_gro_offset(skb));
254
255 NAPI_GRO_CB(skb)->proto = proto;
256
257 flush--;
258 nlen = skb_gro_offset(skb) - off;
259
260 list_for_each_entry(p, head, list) {
261 const struct ipv6hdr *iph2;
262 __be32 first_word; /* <Version:4><Traffic_Class:8><Flow_Label:20> */
263
264 if (!NAPI_GRO_CB(p)->same_flow)
265 continue;
266
267 iph2 = (struct ipv6hdr *)(p->data + off);
268 first_word = *(__be32 *)iph ^ *(__be32 *)iph2;
269
270 /* All fields must match except length and Traffic Class.
271 * XXX skbs on the gro_list have all been parsed and pulled
272 * already so we don't need to compare nlen
273 * (nlen != (sizeof(*iph2) + ipv6_exthdrs_len(iph2, &ops)))
274 * memcmp() alone below is sufficient, right?
275 */
276 if ((first_word & htonl(0xF00FFFFF)) ||
277 !ipv6_addr_equal(&iph->saddr, &iph2->saddr) ||
278 !ipv6_addr_equal(&iph->daddr, &iph2->daddr) ||
279 iph->nexthdr != iph2->nexthdr) {
280 not_same_flow:
281 NAPI_GRO_CB(p)->same_flow = 0;
282 continue;
283 }
284 if (unlikely(nlen > sizeof(struct ipv6hdr))) {
285 if (memcmp(iph + 1, iph2 + 1,
286 nlen - sizeof(struct ipv6hdr)))
287 goto not_same_flow;
288 }
289 }
290
291 NAPI_GRO_CB(skb)->flush |= flush;
292
293 skb_gro_postpull_rcsum(skb, iph, nlen);
294
295 if (unlikely(gro_recursion_inc_test(skb))) {
296 flush = 1;
297 goto out;
298 }
299
300 if (likely(proto == IPPROTO_TCP))
301 pp = tcp6_gro_receive(head, skb);
302 #if IS_BUILTIN(CONFIG_IPV6)
303 else if (likely(proto == IPPROTO_UDP))
> 304 pp = udp6_gro_receive(head, skb);
305 #endif
306 else
307 pp = ops->callbacks.gro_receive(head, skb);
308 out:
309 skb_gro_flush_final(skb, pp, flush);
310
311 return pp;
312 }
313
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Powered by blists - more mailing lists