All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC net-next v4 0/8] xsk: TX metadata
@ 2023-07-24 23:59 Stanislav Fomichev
  2023-07-24 23:59 ` [RFC net-next v4 1/8] xsk: Support XDP_TX_METADATA_LEN Stanislav Fomichev
                   ` (7 more replies)
  0 siblings, 8 replies; 33+ messages in thread
From: Stanislav Fomichev @ 2023-07-24 23:59 UTC (permalink / raw)
  To: bpf
  Cc: ast, daniel, andrii, martin.lau, song, yhs, john.fastabend,
	kpsingh, sdf, haoluo, jolsa, kuba, toke, willemb, dsahern,
	magnus.karlsson, bjorn, maciej.fijalkowski, hawk, netdev,
	xdp-hints

This series implements initial TX metadata (offloads) for AF_XDP.
See patch #2 for the main implementation and mlx5-one for the
example on how to consume the metadata on the device side.

With v4, I'm switching from BPF hooks and kfuncs to a fixed TX
metadata/offload format: the metadata is passed with every tx
umem chunk and it's up to the device driver to interpret it.

Starting with two types of offloads:
- request TX timestamp (and write it back into the metadata area)
- request TX checksum offload

TODO for the non-RFC series:
- have some real device support to verify xdp_hw_metadata works
- Documentation/networking/xdp-rx-metadata.rst - like documentation

v3: https://lore.kernel.org/bpf/20230707193006.1309662-1-sdf@google.com/

Stanislav Fomichev (8):
  xsk: Support XDP_TX_METADATA_LEN
  xsk: add TX timestamp and TX checksum offload support
  net/mlx5e: Implement AF_XDP TX timestamp and checksum offload
  tools: ynl: update netdev sample to dump xsk-features
  selftests/xsk: Support XDP_TX_METADATA_LEN
  selftests/bpf: Add csum helpers
  selftests/bpf: Add TX side to xdp_metadata
  selftests/bpf: Add TX side to xdp_hw_metadata

 Documentation/netlink/specs/netdev.yaml       |  25 ++-
 drivers/net/ethernet/mellanox/mlx5/core/en.h  |   4 +-
 .../net/ethernet/mellanox/mlx5/core/en/xdp.c  |  71 ++++++-
 .../net/ethernet/mellanox/mlx5/core/en/xdp.h  |  10 +-
 .../ethernet/mellanox/mlx5/core/en/xsk/tx.c   |   9 +-
 .../net/ethernet/mellanox/mlx5/core/en_main.c |   1 +
 include/linux/netdevice.h                     |  27 +++
 include/linux/skbuff.h                        |   5 +-
 include/net/xdp_sock.h                        |  61 ++++++
 include/net/xdp_sock_drv.h                    |  13 ++
 include/net/xsk_buff_pool.h                   |   1 +
 include/uapi/linux/if_xdp.h                   |  36 ++++
 include/uapi/linux/netdev.h                   |  15 ++
 net/core/netdev-genl.c                        |  12 +-
 net/xdp/xsk.c                                 |  58 +++++
 net/xdp/xsk_buff_pool.c                       |   1 +
 net/xdp/xsk_queue.h                           |  19 +-
 tools/include/uapi/linux/if_xdp.h             |  50 ++++-
 tools/include/uapi/linux/netdev.h             |  15 ++
 tools/net/ynl/generated/netdev-user.c         |  25 +++
 tools/net/ynl/generated/netdev-user.h         |   5 +
 tools/net/ynl/samples/netdev.c                |   8 +
 tools/testing/selftests/bpf/network_helpers.h |  43 ++++
 .../selftests/bpf/prog_tests/xdp_metadata.c   |  31 ++-
 tools/testing/selftests/bpf/xdp_hw_metadata.c | 201 +++++++++++++++++-
 tools/testing/selftests/bpf/xsk.c             |  17 ++
 tools/testing/selftests/bpf/xsk.h             |   1 +
 27 files changed, 718 insertions(+), 46 deletions(-)

-- 
2.41.0.487.g6d72f3e995-goog


^ permalink raw reply	[flat|nested] 33+ messages in thread
* Re: [RFC net-next v4 2/8] xsk: add TX timestamp and TX checksum offload support
@ 2023-08-06 16:56 kernel test robot
  0 siblings, 0 replies; 33+ messages in thread
From: kernel test robot @ 2023-08-06 16:56 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20230724235957.1953861-3-sdf@google.com>
References: <20230724235957.1953861-3-sdf@google.com>
TO: Stanislav Fomichev <sdf@google.com>

Hi Stanislav,

[This is a private test report for your RFC patch.]
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/Stanislav-Fomichev/xsk-Support-XDP_TX_METADATA_LEN/20230725-080600
base:   net-next/main
patch link:    https://lore.kernel.org/r/20230724235957.1953861-3-sdf%40google.com
patch subject: [RFC net-next v4 2/8] xsk: add TX timestamp and TX checksum offload support
:::::: branch date: 13 days ago
:::::: commit date: 13 days ago
config: i386-randconfig-m021-20230806 (https://download.01.org/0day-ci/archive/20230807/202308070029.iaEW5Co2-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230807/202308070029.iaEW5Co2-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>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202308070029.iaEW5Co2-lkp@intel.com/

New smatch warnings:
net/xdp/xsk.c:707 xsk_build_skb() error: uninitialized symbol 'hr'.

Old smatch warnings:
net/xdp/xsk.c:733 xsk_build_skb() error: 'skb' dereferencing possible ERR_PTR()
net/xdp/xsk.c:1178 xsk_bind() warn: passing a valid pointer to 'PTR_ERR'

vim +/hr +707 net/xdp/xsk.c

9c8f21e6f8856a Xuan Zhuo          2021-02-18  634  
9c8f21e6f8856a Xuan Zhuo          2021-02-18  635  static struct sk_buff *xsk_build_skb(struct xdp_sock *xs,
9c8f21e6f8856a Xuan Zhuo          2021-02-18  636  				     struct xdp_desc *desc)
9c8f21e6f8856a Xuan Zhuo          2021-02-18  637  {
105eed6b3f493a Stanislav Fomichev 2023-07-24  638  	struct xsk_tx_metadata *meta = NULL;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  639  	struct net_device *dev = xs->dev;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  640  	struct sk_buff *skb = xs->skb;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  641  	int err;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  642  
9c8f21e6f8856a Xuan Zhuo          2021-02-18  643  	if (dev->priv_flags & IFF_TX_SKB_NO_LINEAR) {
9c8f21e6f8856a Xuan Zhuo          2021-02-18  644  		skb = xsk_build_skb_zerocopy(xs, desc);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  645  		if (IS_ERR(skb)) {
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  646  			err = PTR_ERR(skb);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  647  			goto free_err;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  648  		}
9c8f21e6f8856a Xuan Zhuo          2021-02-18  649  	} else {
9c8f21e6f8856a Xuan Zhuo          2021-02-18  650  		u32 hr, tr, len;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  651  		void *buffer;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  652  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  653  		buffer = xsk_buff_raw_get_data(xs->pool, desc->addr);
9c8f21e6f8856a Xuan Zhuo          2021-02-18  654  		len = desc->len;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  655  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  656  		if (!skb) {
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  657  			hr = max(NET_SKB_PAD, L1_CACHE_ALIGN(dev->needed_headroom));
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  658  			tr = dev->needed_tailroom;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  659  			skb = sock_alloc_send_skb(&xs->sk, hr + len + tr, 1, &err);
9c8f21e6f8856a Xuan Zhuo          2021-02-18  660  			if (unlikely(!skb))
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  661  				goto free_err;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  662  
9c8f21e6f8856a Xuan Zhuo          2021-02-18  663  			skb_reserve(skb, hr);
9c8f21e6f8856a Xuan Zhuo          2021-02-18  664  			skb_put(skb, len);
9c8f21e6f8856a Xuan Zhuo          2021-02-18  665  
9c8f21e6f8856a Xuan Zhuo          2021-02-18  666  			err = skb_store_bits(skb, 0, buffer, len);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  667  			if (unlikely(err))
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  668  				goto free_err;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  669  		} else {
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  670  			int nr_frags = skb_shinfo(skb)->nr_frags;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  671  			struct page *page;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  672  			u8 *vaddr;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  673  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  674  			if (unlikely(nr_frags == (MAX_SKB_FRAGS - 1) && xp_mb_desc(desc))) {
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  675  				err = -EFAULT;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  676  				goto free_err;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  677  			}
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  678  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  679  			page = alloc_page(xs->sk.sk_allocation);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  680  			if (unlikely(!page)) {
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  681  				err = -EAGAIN;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  682  				goto free_err;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  683  			}
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  684  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  685  			vaddr = kmap_local_page(page);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  686  			memcpy(vaddr, buffer, len);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  687  			kunmap_local(vaddr);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  688  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  689  			skb_add_rx_frag(skb, nr_frags, page, 0, len, 0);
9c8f21e6f8856a Xuan Zhuo          2021-02-18  690  		}
105eed6b3f493a Stanislav Fomichev 2023-07-24  691  
105eed6b3f493a Stanislav Fomichev 2023-07-24  692  		if (desc->options & XDP_TX_METADATA) {
105eed6b3f493a Stanislav Fomichev 2023-07-24  693  			if (unlikely(xs->tx_metadata_len == 0)) {
105eed6b3f493a Stanislav Fomichev 2023-07-24  694  				err = -EINVAL;
105eed6b3f493a Stanislav Fomichev 2023-07-24  695  				goto free_err;
105eed6b3f493a Stanislav Fomichev 2023-07-24  696  			}
105eed6b3f493a Stanislav Fomichev 2023-07-24  697  
105eed6b3f493a Stanislav Fomichev 2023-07-24  698  			meta = buffer - xs->tx_metadata_len;
105eed6b3f493a Stanislav Fomichev 2023-07-24  699  
105eed6b3f493a Stanislav Fomichev 2023-07-24  700  			if (meta->flags & XDP_TX_METADATA_CHECKSUM) {
105eed6b3f493a Stanislav Fomichev 2023-07-24  701  				if (unlikely(meta->csum_start + meta->csum_offset +
105eed6b3f493a Stanislav Fomichev 2023-07-24  702  					     sizeof(__sum16) > len)) {
105eed6b3f493a Stanislav Fomichev 2023-07-24  703  					err = -EINVAL;
105eed6b3f493a Stanislav Fomichev 2023-07-24  704  					goto free_err;
105eed6b3f493a Stanislav Fomichev 2023-07-24  705  				}
105eed6b3f493a Stanislav Fomichev 2023-07-24  706  
105eed6b3f493a Stanislav Fomichev 2023-07-24 @707  				skb->csum_start = hr + meta->csum_start;
105eed6b3f493a Stanislav Fomichev 2023-07-24  708  				skb->csum_offset = meta->csum_offset;
105eed6b3f493a Stanislav Fomichev 2023-07-24  709  				skb->ip_summed = CHECKSUM_PARTIAL;
105eed6b3f493a Stanislav Fomichev 2023-07-24  710  
105eed6b3f493a Stanislav Fomichev 2023-07-24  711  				if (unlikely(meta->flags & XDP_TX_METADATA_CHECKSUM_SW)) {
105eed6b3f493a Stanislav Fomichev 2023-07-24  712  					err = skb_checksum_help(skb);
105eed6b3f493a Stanislav Fomichev 2023-07-24  713  					if (err)
105eed6b3f493a Stanislav Fomichev 2023-07-24  714  						goto free_err;
105eed6b3f493a Stanislav Fomichev 2023-07-24  715  				}
105eed6b3f493a Stanislav Fomichev 2023-07-24  716  			}
105eed6b3f493a Stanislav Fomichev 2023-07-24  717  		}
9c8f21e6f8856a Xuan Zhuo          2021-02-18  718  	}
9c8f21e6f8856a Xuan Zhuo          2021-02-18  719  
9c8f21e6f8856a Xuan Zhuo          2021-02-18  720  	skb->dev = dev;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  721  	skb->priority = xs->sk.sk_priority;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  722  	skb->mark = xs->sk.sk_mark;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  723  	skb->destructor = xsk_destruct_skb;
105eed6b3f493a Stanislav Fomichev 2023-07-24  724  	skb_shinfo(skb)->xsk_meta = meta;
b7f72a30e9ac25 Tirthendu Sarkar   2023-07-19  725  	xsk_set_destructor_arg(skb);
9c8f21e6f8856a Xuan Zhuo          2021-02-18  726  
9c8f21e6f8856a Xuan Zhuo          2021-02-18  727  	return skb;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  728  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  729  free_err:
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  730  	if (err == -EAGAIN) {
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  731  		xsk_cq_cancel_locked(xs, 1);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  732  	} else {
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  733  		xsk_set_destructor_arg(skb);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  734  		xsk_drop_skb(skb);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  735  		xskq_cons_release(xs->tx);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  736  	}
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  737  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  738  	return ERR_PTR(err);
9c8f21e6f8856a Xuan Zhuo          2021-02-18  739  }
9c8f21e6f8856a Xuan Zhuo          2021-02-18  740  

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

^ permalink raw reply	[flat|nested] 33+ messages in thread
* Re: [RFC net-next v4 2/8] xsk: add TX timestamp and TX checksum offload support
@ 2023-08-07  1:52 kernel test robot
  0 siblings, 0 replies; 33+ messages in thread
From: kernel test robot @ 2023-08-07  1:52 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20230724235957.1953861-3-sdf@google.com>
References: <20230724235957.1953861-3-sdf@google.com>
TO: Stanislav Fomichev <sdf@google.com>

Hi Stanislav,

[This is a private test report for your RFC patch.]
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/Stanislav-Fomichev/xsk-Support-XDP_TX_METADATA_LEN/20230725-080600
base:   net-next/main
patch link:    https://lore.kernel.org/r/20230724235957.1953861-3-sdf%40google.com
patch subject: [RFC net-next v4 2/8] xsk: add TX timestamp and TX checksum offload support
:::::: branch date: 13 days ago
:::::: commit date: 13 days ago
config: i386-randconfig-m021-20230806 (https://download.01.org/0day-ci/archive/20230807/202308070948.jjqDEUQa-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230807/202308070948.jjqDEUQa-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>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202308070948.jjqDEUQa-lkp@intel.com/

New smatch warnings:
net/xdp/xsk.c:707 xsk_build_skb() error: uninitialized symbol 'hr'.

Old smatch warnings:
net/xdp/xsk.c:733 xsk_build_skb() error: 'skb' dereferencing possible ERR_PTR()

vim +/hr +707 net/xdp/xsk.c

9c8f21e6f8856a Xuan Zhuo          2021-02-18  634  
9c8f21e6f8856a Xuan Zhuo          2021-02-18  635  static struct sk_buff *xsk_build_skb(struct xdp_sock *xs,
9c8f21e6f8856a Xuan Zhuo          2021-02-18  636  				     struct xdp_desc *desc)
9c8f21e6f8856a Xuan Zhuo          2021-02-18  637  {
105eed6b3f493a Stanislav Fomichev 2023-07-24  638  	struct xsk_tx_metadata *meta = NULL;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  639  	struct net_device *dev = xs->dev;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  640  	struct sk_buff *skb = xs->skb;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  641  	int err;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  642  
9c8f21e6f8856a Xuan Zhuo          2021-02-18  643  	if (dev->priv_flags & IFF_TX_SKB_NO_LINEAR) {
9c8f21e6f8856a Xuan Zhuo          2021-02-18  644  		skb = xsk_build_skb_zerocopy(xs, desc);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  645  		if (IS_ERR(skb)) {
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  646  			err = PTR_ERR(skb);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  647  			goto free_err;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  648  		}
9c8f21e6f8856a Xuan Zhuo          2021-02-18  649  	} else {
9c8f21e6f8856a Xuan Zhuo          2021-02-18  650  		u32 hr, tr, len;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  651  		void *buffer;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  652  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  653  		buffer = xsk_buff_raw_get_data(xs->pool, desc->addr);
9c8f21e6f8856a Xuan Zhuo          2021-02-18  654  		len = desc->len;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  655  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  656  		if (!skb) {
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  657  			hr = max(NET_SKB_PAD, L1_CACHE_ALIGN(dev->needed_headroom));
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  658  			tr = dev->needed_tailroom;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  659  			skb = sock_alloc_send_skb(&xs->sk, hr + len + tr, 1, &err);
9c8f21e6f8856a Xuan Zhuo          2021-02-18  660  			if (unlikely(!skb))
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  661  				goto free_err;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  662  
9c8f21e6f8856a Xuan Zhuo          2021-02-18  663  			skb_reserve(skb, hr);
9c8f21e6f8856a Xuan Zhuo          2021-02-18  664  			skb_put(skb, len);
9c8f21e6f8856a Xuan Zhuo          2021-02-18  665  
9c8f21e6f8856a Xuan Zhuo          2021-02-18  666  			err = skb_store_bits(skb, 0, buffer, len);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  667  			if (unlikely(err))
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  668  				goto free_err;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  669  		} else {
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  670  			int nr_frags = skb_shinfo(skb)->nr_frags;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  671  			struct page *page;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  672  			u8 *vaddr;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  673  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  674  			if (unlikely(nr_frags == (MAX_SKB_FRAGS - 1) && xp_mb_desc(desc))) {
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  675  				err = -EFAULT;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  676  				goto free_err;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  677  			}
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  678  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  679  			page = alloc_page(xs->sk.sk_allocation);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  680  			if (unlikely(!page)) {
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  681  				err = -EAGAIN;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  682  				goto free_err;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  683  			}
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  684  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  685  			vaddr = kmap_local_page(page);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  686  			memcpy(vaddr, buffer, len);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  687  			kunmap_local(vaddr);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  688  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  689  			skb_add_rx_frag(skb, nr_frags, page, 0, len, 0);
9c8f21e6f8856a Xuan Zhuo          2021-02-18  690  		}
105eed6b3f493a Stanislav Fomichev 2023-07-24  691  
105eed6b3f493a Stanislav Fomichev 2023-07-24  692  		if (desc->options & XDP_TX_METADATA) {
105eed6b3f493a Stanislav Fomichev 2023-07-24  693  			if (unlikely(xs->tx_metadata_len == 0)) {
105eed6b3f493a Stanislav Fomichev 2023-07-24  694  				err = -EINVAL;
105eed6b3f493a Stanislav Fomichev 2023-07-24  695  				goto free_err;
105eed6b3f493a Stanislav Fomichev 2023-07-24  696  			}
105eed6b3f493a Stanislav Fomichev 2023-07-24  697  
105eed6b3f493a Stanislav Fomichev 2023-07-24  698  			meta = buffer - xs->tx_metadata_len;
105eed6b3f493a Stanislav Fomichev 2023-07-24  699  
105eed6b3f493a Stanislav Fomichev 2023-07-24  700  			if (meta->flags & XDP_TX_METADATA_CHECKSUM) {
105eed6b3f493a Stanislav Fomichev 2023-07-24  701  				if (unlikely(meta->csum_start + meta->csum_offset +
105eed6b3f493a Stanislav Fomichev 2023-07-24  702  					     sizeof(__sum16) > len)) {
105eed6b3f493a Stanislav Fomichev 2023-07-24  703  					err = -EINVAL;
105eed6b3f493a Stanislav Fomichev 2023-07-24  704  					goto free_err;
105eed6b3f493a Stanislav Fomichev 2023-07-24  705  				}
105eed6b3f493a Stanislav Fomichev 2023-07-24  706  
105eed6b3f493a Stanislav Fomichev 2023-07-24 @707  				skb->csum_start = hr + meta->csum_start;
105eed6b3f493a Stanislav Fomichev 2023-07-24  708  				skb->csum_offset = meta->csum_offset;
105eed6b3f493a Stanislav Fomichev 2023-07-24  709  				skb->ip_summed = CHECKSUM_PARTIAL;
105eed6b3f493a Stanislav Fomichev 2023-07-24  710  
105eed6b3f493a Stanislav Fomichev 2023-07-24  711  				if (unlikely(meta->flags & XDP_TX_METADATA_CHECKSUM_SW)) {
105eed6b3f493a Stanislav Fomichev 2023-07-24  712  					err = skb_checksum_help(skb);
105eed6b3f493a Stanislav Fomichev 2023-07-24  713  					if (err)
105eed6b3f493a Stanislav Fomichev 2023-07-24  714  						goto free_err;
105eed6b3f493a Stanislav Fomichev 2023-07-24  715  				}
105eed6b3f493a Stanislav Fomichev 2023-07-24  716  			}
105eed6b3f493a Stanislav Fomichev 2023-07-24  717  		}
9c8f21e6f8856a Xuan Zhuo          2021-02-18  718  	}
9c8f21e6f8856a Xuan Zhuo          2021-02-18  719  
9c8f21e6f8856a Xuan Zhuo          2021-02-18  720  	skb->dev = dev;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  721  	skb->priority = xs->sk.sk_priority;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  722  	skb->mark = xs->sk.sk_mark;
9c8f21e6f8856a Xuan Zhuo          2021-02-18  723  	skb->destructor = xsk_destruct_skb;
105eed6b3f493a Stanislav Fomichev 2023-07-24  724  	skb_shinfo(skb)->xsk_meta = meta;
b7f72a30e9ac25 Tirthendu Sarkar   2023-07-19  725  	xsk_set_destructor_arg(skb);
9c8f21e6f8856a Xuan Zhuo          2021-02-18  726  
9c8f21e6f8856a Xuan Zhuo          2021-02-18  727  	return skb;
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  728  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  729  free_err:
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  730  	if (err == -EAGAIN) {
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  731  		xsk_cq_cancel_locked(xs, 1);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  732  	} else {
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  733  		xsk_set_destructor_arg(skb);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  734  		xsk_drop_skb(skb);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  735  		xskq_cons_release(xs->tx);
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  736  	}
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  737  
cf24f5a5feeaae Tirthendu Sarkar   2023-07-19  738  	return ERR_PTR(err);
9c8f21e6f8856a Xuan Zhuo          2021-02-18  739  }
9c8f21e6f8856a Xuan Zhuo          2021-02-18  740  

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

^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2023-08-07  5:47 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-24 23:59 [RFC net-next v4 0/8] xsk: TX metadata Stanislav Fomichev
2023-07-24 23:59 ` [RFC net-next v4 1/8] xsk: Support XDP_TX_METADATA_LEN Stanislav Fomichev
2023-07-24 23:59 ` [RFC net-next v4 2/8] xsk: add TX timestamp and TX checksum offload support Stanislav Fomichev
2023-07-25 19:28   ` Simon Horman
2023-07-25 20:30     ` Stanislav Fomichev
2023-07-25 21:28       ` Jakub Kicinski
2023-07-25 22:40         ` Stanislav Fomichev
2023-07-26  7:47           ` Simon Horman
2023-07-25 20:54   ` Willem de Bruijn
2023-07-25 22:39     ` Stanislav Fomichev
2023-07-25 23:10       ` Willem de Bruijn
2023-07-25 23:48         ` Stanislav Fomichev
2023-07-27 14:11         ` Jesper Dangaard Brouer
2023-07-27 16:37           ` Stanislav Fomichev
2023-07-25 20:58   ` Willem de Bruijn
2023-07-28 11:56     ` Jesper Dangaard Brouer
2023-07-28 13:19       ` Willem de Bruijn
2023-07-26 19:25   ` [xdp-hints] " Jesper Dangaard Brouer
2023-07-26 21:25     ` Stanislav Fomichev
2023-07-27 13:50       ` Jesper Dangaard Brouer
2023-07-27 16:34         ` Stanislav Fomichev
2023-08-07  5:47   ` Dan Carpenter
2023-07-24 23:59 ` [RFC net-next v4 3/8] net/mlx5e: Implement AF_XDP TX timestamp and checksum offload Stanislav Fomichev
2023-07-24 23:59 ` [RFC net-next v4 4/8] tools: ynl: update netdev sample to dump xsk-features Stanislav Fomichev
2023-07-24 23:59 ` [RFC net-next v4 5/8] selftests/xsk: Support XDP_TX_METADATA_LEN Stanislav Fomichev
2023-07-24 23:59 ` [RFC net-next v4 6/8] selftests/bpf: Add csum helpers Stanislav Fomichev
2023-07-24 23:59 ` [RFC net-next v4 7/8] selftests/bpf: Add TX side to xdp_metadata Stanislav Fomichev
2023-07-24 23:59 ` [RFC net-next v4 8/8] selftests/bpf: Add TX side to xdp_hw_metadata Stanislav Fomichev
2023-07-25 20:59   ` Willem de Bruijn
2023-07-25 22:36     ` Stanislav Fomichev
2023-07-25 22:55       ` Willem de Bruijn
  -- strict thread matches above, loose matches on Subject: below --
2023-08-06 16:56 [RFC net-next v4 2/8] xsk: add TX timestamp and TX checksum offload support kernel test robot
2023-08-07  1:52 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.