All of lore.kernel.org
 help / color / mirror / Atom feed
* [isilence:zcrx/v5 6/17] net/ipv4/tcp.c:2479:29: error: use of undeclared identifier 'dmabuf_devmem_ops'
@ 2024-10-11  3:19 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2024-10-11  3:19 UTC (permalink / raw)
  To: Pavel Begunkov; +Cc: oe-kbuild-all

tree:   https://github.com/isilence/linux zcrx/v5
head:   d4e027e3d3f5ec0c2cf67a06df841fa6e0e8016f
commit: 7d14efdc8782b0359d840b3434d06415162da138 [6/17] net: prepare for non devmem TCP memory providers
config: i386-randconfig-002-20241011 (https://download.01.org/0day-ci/archive/20241011/202410111147.mAa8ymox-lkp@intel.com/config)
compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241011/202410111147.mAa8ymox-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/202410111147.mAa8ymox-lkp@intel.com/

All errors (new ones prefixed by >>):

>> net/ipv4/tcp.c:2479:29: error: use of undeclared identifier 'dmabuf_devmem_ops'
    2479 |                         if (niov->pp->mp_ops != &dmabuf_devmem_ops) {
         |                                                  ^
   1 error generated.


vim +/dmabuf_devmem_ops +2479 net/ipv4/tcp.c

  2396	
  2397	/* On error, returns the -errno. On success, returns number of bytes sent to the
  2398	 * user. May not consume all of @remaining_len.
  2399	 */
  2400	static int tcp_recvmsg_dmabuf(struct sock *sk, const struct sk_buff *skb,
  2401				      unsigned int offset, struct msghdr *msg,
  2402				      int remaining_len)
  2403	{
  2404		struct dmabuf_cmsg dmabuf_cmsg = { 0 };
  2405		struct tcp_xa_pool tcp_xa_pool;
  2406		unsigned int start;
  2407		int i, copy, n;
  2408		int sent = 0;
  2409		int err = 0;
  2410	
  2411		tcp_xa_pool.max = 0;
  2412		tcp_xa_pool.idx = 0;
  2413		do {
  2414			start = skb_headlen(skb);
  2415	
  2416			if (skb_frags_readable(skb)) {
  2417				err = -ENODEV;
  2418				goto out;
  2419			}
  2420	
  2421			/* Copy header. */
  2422			copy = start - offset;
  2423			if (copy > 0) {
  2424				copy = min(copy, remaining_len);
  2425	
  2426				n = copy_to_iter(skb->data + offset, copy,
  2427						 &msg->msg_iter);
  2428				if (n != copy) {
  2429					err = -EFAULT;
  2430					goto out;
  2431				}
  2432	
  2433				offset += copy;
  2434				remaining_len -= copy;
  2435	
  2436				/* First a dmabuf_cmsg for # bytes copied to user
  2437				 * buffer.
  2438				 */
  2439				memset(&dmabuf_cmsg, 0, sizeof(dmabuf_cmsg));
  2440				dmabuf_cmsg.frag_size = copy;
  2441				err = put_cmsg(msg, SOL_SOCKET, SO_DEVMEM_LINEAR,
  2442					       sizeof(dmabuf_cmsg), &dmabuf_cmsg);
  2443				if (err || msg->msg_flags & MSG_CTRUNC) {
  2444					msg->msg_flags &= ~MSG_CTRUNC;
  2445					if (!err)
  2446						err = -ETOOSMALL;
  2447					goto out;
  2448				}
  2449	
  2450				sent += copy;
  2451	
  2452				if (remaining_len == 0)
  2453					goto out;
  2454			}
  2455	
  2456			/* after that, send information of dmabuf pages through a
  2457			 * sequence of cmsg
  2458			 */
  2459			for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
  2460				skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
  2461				struct net_iov *niov;
  2462				u64 frag_offset;
  2463				int end;
  2464	
  2465				/* !skb_frags_readable() should indicate that ALL the
  2466				 * frags in this skb are dmabuf net_iovs. We're checking
  2467				 * for that flag above, but also check individual frags
  2468				 * here. If the tcp stack is not setting
  2469				 * skb_frags_readable() correctly, we still don't want
  2470				 * to crash here.
  2471				 */
  2472				if (!skb_frag_net_iov(frag)) {
  2473					net_err_ratelimited("Found non-dmabuf skb with net_iov");
  2474					err = -ENODEV;
  2475					goto out;
  2476				}
  2477	
  2478				niov = skb_frag_net_iov(frag);
> 2479				if (niov->pp->mp_ops != &dmabuf_devmem_ops) {
  2480					err = -ENODEV;
  2481					goto out;
  2482				}
  2483	
  2484				end = start + skb_frag_size(frag);
  2485				copy = end - offset;
  2486	
  2487				if (copy > 0) {
  2488					copy = min(copy, remaining_len);
  2489	
  2490					frag_offset = net_iov_virtual_addr(niov) +
  2491						      skb_frag_off(frag) + offset -
  2492						      start;
  2493					dmabuf_cmsg.frag_offset = frag_offset;
  2494					dmabuf_cmsg.frag_size = copy;
  2495					err = tcp_xa_pool_refill(sk, &tcp_xa_pool,
  2496								 skb_shinfo(skb)->nr_frags - i);
  2497					if (err)
  2498						goto out;
  2499	
  2500					/* Will perform the exchange later */
  2501					dmabuf_cmsg.frag_token = tcp_xa_pool.tokens[tcp_xa_pool.idx];
  2502					dmabuf_cmsg.dmabuf_id = net_devmem_iov_binding_id(niov);
  2503	
  2504					offset += copy;
  2505					remaining_len -= copy;
  2506	
  2507					err = put_cmsg(msg, SOL_SOCKET,
  2508						       SO_DEVMEM_DMABUF,
  2509						       sizeof(dmabuf_cmsg),
  2510						       &dmabuf_cmsg);
  2511					if (err || msg->msg_flags & MSG_CTRUNC) {
  2512						msg->msg_flags &= ~MSG_CTRUNC;
  2513						if (!err)
  2514							err = -ETOOSMALL;
  2515						goto out;
  2516					}
  2517	
  2518					atomic_long_inc(&niov->pp_ref_count);
  2519					tcp_xa_pool.netmems[tcp_xa_pool.idx++] = skb_frag_netmem(frag);
  2520	
  2521					sent += copy;
  2522	
  2523					if (remaining_len == 0)
  2524						goto out;
  2525				}
  2526				start = end;
  2527			}
  2528	
  2529			tcp_xa_pool_commit(sk, &tcp_xa_pool);
  2530			if (!remaining_len)
  2531				goto out;
  2532	
  2533			/* if remaining_len is not satisfied yet, we need to go to the
  2534			 * next frag in the frag_list to satisfy remaining_len.
  2535			 */
  2536			skb = skb_shinfo(skb)->frag_list ?: skb->next;
  2537	
  2538			offset = offset - start;
  2539		} while (skb);
  2540	
  2541		if (remaining_len) {
  2542			err = -EFAULT;
  2543			goto out;
  2544		}
  2545	
  2546	out:
  2547		tcp_xa_pool_commit(sk, &tcp_xa_pool);
  2548		if (!sent)
  2549			sent = err;
  2550	
  2551		return sent;
  2552	}
  2553	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-10-11  3:19 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-11  3:19 [isilence:zcrx/v5 6/17] net/ipv4/tcp.c:2479:29: error: use of undeclared identifier 'dmabuf_devmem_ops' kernel test robot

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.