All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.