From: kernel test robot <lkp@intel.com>
To: Bobby Eshleman <bobbyeshleman@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>,
Kuniyuki Iwashima <kuniyu@google.com>,
Willem de Bruijn <willemb@google.com>,
Neal Cardwell <ncardwell@google.com>,
David Ahern <dsahern@kernel.org>
Cc: oe-kbuild-all@lists.linux.dev, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org,
Stanislav Fomichev <sdf@fomichev.me>,
Mina Almasry <almasrymina@google.com>,
Bobby Eshleman <bobbyeshleman@meta.com>
Subject: Re: [PATCH net-next 2/2] net: devmem: use niov array for token management
Date: Wed, 3 Sep 2025 18:50:32 +0800 [thread overview]
Message-ID: <202509031855.54vuvsX1-lkp@intel.com> (raw)
In-Reply-To: <20250902-scratch-bobbyeshleman-devmem-tcp-token-upstream-v1-2-d946169b5550@meta.com>
Hi Bobby,
kernel test robot noticed the following build errors:
[auto build test ERROR on cd8a4cfa6bb43a441901e82f5c222dddc75a18a3]
url: https://github.com/intel-lab-lkp/linux/commits/Bobby-Eshleman/net-devmem-rename-tx_vec-to-vec-in-dmabuf-binding/20250903-054553
base: cd8a4cfa6bb43a441901e82f5c222dddc75a18a3
patch link: https://lore.kernel.org/r/20250902-scratch-bobbyeshleman-devmem-tcp-token-upstream-v1-2-d946169b5550%40meta.com
patch subject: [PATCH net-next 2/2] net: devmem: use niov array for token management
config: x86_64-defconfig (https://download.01.org/0day-ci/archive/20250903/202509031855.54vuvsX1-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250903/202509031855.54vuvsX1-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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202509031855.54vuvsX1-lkp@intel.com/
All errors (new ones prefixed by >>):
net/ipv4/tcp.c: In function 'tcp_recvmsg_dmabuf':
>> net/ipv4/tcp.c:2502:41: error: implicit declaration of function 'net_devmem_dmabuf_binding_get'; did you mean 'net_devmem_dmabuf_binding_put'? [-Werror=implicit-function-declaration]
2502 | net_devmem_dmabuf_binding_get(binding);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| net_devmem_dmabuf_binding_put
cc1: some warnings being treated as errors
vim +2502 net/ipv4/tcp.c
2390
2391 /* On error, returns the -errno. On success, returns number of bytes sent to the
2392 * user. May not consume all of @remaining_len.
2393 */
2394 static int tcp_recvmsg_dmabuf(struct sock *sk, const struct sk_buff *skb,
2395 unsigned int offset, struct msghdr *msg,
2396 int remaining_len)
2397 {
2398 struct dmabuf_cmsg dmabuf_cmsg = { 0 };
2399 unsigned int start;
2400 int i, copy, n;
2401 int sent = 0;
2402 int err = 0;
2403
2404 do {
2405 start = skb_headlen(skb);
2406
2407 if (skb_frags_readable(skb)) {
2408 err = -ENODEV;
2409 goto out;
2410 }
2411
2412 /* Copy header. */
2413 copy = start - offset;
2414 if (copy > 0) {
2415 copy = min(copy, remaining_len);
2416
2417 n = copy_to_iter(skb->data + offset, copy,
2418 &msg->msg_iter);
2419 if (n != copy) {
2420 err = -EFAULT;
2421 goto out;
2422 }
2423
2424 offset += copy;
2425 remaining_len -= copy;
2426
2427 /* First a dmabuf_cmsg for # bytes copied to user
2428 * buffer.
2429 */
2430 memset(&dmabuf_cmsg, 0, sizeof(dmabuf_cmsg));
2431 dmabuf_cmsg.frag_size = copy;
2432 err = put_cmsg_notrunc(msg, SOL_SOCKET,
2433 SO_DEVMEM_LINEAR,
2434 sizeof(dmabuf_cmsg),
2435 &dmabuf_cmsg);
2436 if (err)
2437 goto out;
2438
2439 sent += copy;
2440
2441 if (remaining_len == 0)
2442 goto out;
2443 }
2444
2445 /* after that, send information of dmabuf pages through a
2446 * sequence of cmsg
2447 */
2448 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
2449 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
2450 struct net_devmem_dmabuf_binding *binding;
2451 struct net_iov *niov;
2452 u64 frag_offset;
2453 size_t size;
2454 u32 token;
2455 int end;
2456
2457 /* !skb_frags_readable() should indicate that ALL the
2458 * frags in this skb are dmabuf net_iovs. We're checking
2459 * for that flag above, but also check individual frags
2460 * here. If the tcp stack is not setting
2461 * skb_frags_readable() correctly, we still don't want
2462 * to crash here.
2463 */
2464 if (!skb_frag_net_iov(frag)) {
2465 net_err_ratelimited("Found non-dmabuf skb with net_iov");
2466 err = -ENODEV;
2467 goto out;
2468 }
2469
2470 niov = skb_frag_net_iov(frag);
2471 if (!net_is_devmem_iov(niov)) {
2472 err = -ENODEV;
2473 goto out;
2474 }
2475
2476 end = start + skb_frag_size(frag);
2477 copy = end - offset;
2478
2479 if (copy > 0) {
2480 copy = min(copy, remaining_len);
2481
2482 frag_offset = net_iov_virtual_addr(niov) +
2483 skb_frag_off(frag) + offset -
2484 start;
2485 dmabuf_cmsg.frag_offset = frag_offset;
2486 dmabuf_cmsg.frag_size = copy;
2487
2488 binding = net_devmem_iov_binding(niov);
2489
2490 if (!sk->sk_user_frags.binding) {
2491 sk->sk_user_frags.binding = binding;
2492
2493 size = binding->dmabuf->size / PAGE_SIZE;
2494 sk->sk_user_frags.urefs = kzalloc(size,
2495 GFP_KERNEL);
2496 if (!sk->sk_user_frags.urefs) {
2497 sk->sk_user_frags.binding = NULL;
2498 err = -ENOMEM;
2499 goto out;
2500 }
2501
> 2502 net_devmem_dmabuf_binding_get(binding);
2503 }
2504
2505 if (WARN_ONCE(sk->sk_user_frags.binding != binding,
2506 "binding changed for devmem socket")) {
2507 err = -EFAULT;
2508 goto out;
2509 }
2510
2511 token = net_iov_virtual_addr(niov) >> PAGE_SHIFT;
2512 binding->vec[token] = niov;
2513 dmabuf_cmsg.frag_token = token;
2514
2515 /* Will perform the exchange later */
2516 dmabuf_cmsg.dmabuf_id = net_devmem_iov_binding_id(niov);
2517
2518 offset += copy;
2519 remaining_len -= copy;
2520
2521 err = put_cmsg_notrunc(msg, SOL_SOCKET,
2522 SO_DEVMEM_DMABUF,
2523 sizeof(dmabuf_cmsg),
2524 &dmabuf_cmsg);
2525 if (err)
2526 goto out;
2527
2528 atomic_inc(&sk->sk_user_frags.urefs[token]);
2529
2530 atomic_long_inc(&niov->pp_ref_count);
2531
2532 sent += copy;
2533
2534 if (remaining_len == 0)
2535 goto out;
2536 }
2537 start = end;
2538 }
2539
2540 if (!remaining_len)
2541 goto out;
2542
2543 /* if remaining_len is not satisfied yet, we need to go to the
2544 * next frag in the frag_list to satisfy remaining_len.
2545 */
2546 skb = skb_shinfo(skb)->frag_list ?: skb->next;
2547
2548 offset = offset - start;
2549 } while (skb);
2550
2551 if (remaining_len) {
2552 err = -EFAULT;
2553 goto out;
2554 }
2555
2556 out:
2557 if (!sent)
2558 sent = err;
2559
2560 return sent;
2561 }
2562
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2025-09-03 10:52 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-02 21:36 [PATCH net-next 0/2] net: devmem: improve cpu cost of RX token management Bobby Eshleman
2025-09-02 21:36 ` [PATCH net-next 1/2] net: devmem: rename tx_vec to vec in dmabuf binding Bobby Eshleman
2025-09-02 21:36 ` [PATCH net-next 2/2] net: devmem: use niov array for token management Bobby Eshleman
2025-09-03 10:50 ` kernel test robot [this message]
2025-09-03 20:20 ` Mina Almasry
2025-09-04 0:15 ` Bobby Eshleman
2025-09-05 20:25 ` Mina Almasry
2025-09-05 20:38 ` Stanislav Fomichev
2025-09-08 16:16 ` Bobby Eshleman
2025-09-03 17:46 ` [syzbot ci] Re: net: devmem: improve cpu cost of RX " syzbot ci
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202509031855.54vuvsX1-lkp@intel.com \
--to=lkp@intel.com \
--cc=almasrymina@google.com \
--cc=bobbyeshleman@gmail.com \
--cc=bobbyeshleman@meta.com \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=kuniyu@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=ncardwell@google.com \
--cc=netdev@vger.kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=willemb@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.