/linux/drivers/net/ethernet/mellanox/mlx5/core/en/xsk/ |
H A D | pool.c | 23 static int mlx5e_xsk_get_pools(struct mlx5e_xsk *xsk) in mlx5e_xsk_get_pools() argument 25 if (!xsk->pools) { in mlx5e_xsk_get_pools() 26 xsk->pools = kcalloc(MLX5E_MAX_NUM_CHANNELS, in mlx5e_xsk_get_pools() 27 sizeof(*xsk->pools), GFP_KERNEL); in mlx5e_xsk_get_pools() 28 if (unlikely(!xsk->pools)) in mlx5e_xsk_get_pools() 32 xsk->refcnt++; in mlx5e_xsk_get_pools() 33 xsk->ever_used = true; in mlx5e_xsk_get_pools() 38 static void mlx5e_xsk_put_pools(struct mlx5e_xsk *xsk) in mlx5e_xsk_put_pools() argument 40 if (!--xsk->refcnt) { in mlx5e_xsk_put_pools() 41 kfree(xsk->pools); in mlx5e_xsk_put_pools() [all …]
|
H A D | setup.c | 12 struct mlx5e_xsk_param *xsk) in mlx5e_legacy_rq_validate_xsk() argument 14 if (!mlx5e_rx_is_linear_skb(mdev, params, xsk)) { in mlx5e_legacy_rq_validate_xsk() 15 mlx5_core_err(mdev, "Legacy RQ linear mode for XSK can't be activated with current params\n"); in mlx5e_legacy_rq_validate_xsk() 28 struct mlx5e_xsk_param *xsk, in mlx5e_validate_xsk_param() argument 32 * and xsk->chunk_size is limited to 65535 bytes. in mlx5e_validate_xsk_param() 34 if ((size_t)xsk->chunk_size > PAGE_SIZE || xsk->chunk_size < MLX5E_MIN_XSK_CHUNK_SIZE) { in mlx5e_validate_xsk_param() 35 mlx5_core_err(mdev, "XSK chunk size %u out of bounds [%u, %lu]\n", xsk->chunk_size, in mlx5e_validate_xsk_param() 40 /* frag_sz is different for regular and XSK RQs, so ensure that linear in mlx5e_validate_xsk_param() 45 return !mlx5e_mpwrq_validate_xsk(mdev, params, xsk); in mlx5e_validate_xsk_param() 47 return !mlx5e_legacy_rq_validate_xsk(mdev, params, xsk); in mlx5e_validate_xsk_param() [all …]
|
H A D | pool.h | 10 struct mlx5e_xsk *xsk, u16 ix) in mlx5e_xsk_get_pool() argument 12 if (!xsk || !xsk->pools) in mlx5e_xsk_get_pool() 18 return xsk->pools[ix]; in mlx5e_xsk_get_pool() 22 void mlx5e_build_xsk_param(struct xsk_buff_pool *pool, struct mlx5e_xsk_param *xsk);
|
H A D | setup.h | 12 struct mlx5e_xsk_param *xsk, 15 struct mlx5e_xsk_param *xsk, struct xsk_buff_pool *pool,
|
/linux/drivers/net/ethernet/mellanox/mlx5/core/en/ |
H A D | params.c | 23 u8 mlx5e_mpwrq_page_shift(struct mlx5_core_dev *mdev, struct mlx5e_xsk_param *xsk) in mlx5e_mpwrq_page_shift() argument 25 u8 req_page_shift = xsk ? order_base_2(xsk->chunk_size) : PAGE_SHIFT; in mlx5e_mpwrq_page_shift() 29 if (WARN_ON_ONCE(!xsk && req_page_shift < min_page_shift)) in mlx5e_mpwrq_page_shift() 36 mlx5e_mpwrq_umr_mode(struct mlx5_core_dev *mdev, struct mlx5e_xsk_param *xsk) in mlx5e_mpwrq_umr_mode() argument 47 u8 page_shift = mlx5e_mpwrq_page_shift(mdev, xsk); in mlx5e_mpwrq_umr_mode() 48 bool unaligned = xsk ? xsk->unaligned : false; in mlx5e_mpwrq_umr_mode() 51 if (xsk) { in mlx5e_mpwrq_umr_mode() 52 oversized = xsk->chunk_size < (1 << page_shift); in mlx5e_mpwrq_umr_mode() 53 WARN_ON_ONCE(xsk->chunk_size > (1 << page_shift)); in mlx5e_mpwrq_umr_mode() 56 /* XSK frame size doesn't match the UMR page size, either because the in mlx5e_mpwrq_umr_mode() [all …]
|
H A D | params.h | 58 u8 mlx5e_mpwrq_page_shift(struct mlx5_core_dev *mdev, struct mlx5e_xsk_param *xsk); 60 mlx5e_mpwrq_umr_mode(struct mlx5_core_dev *mdev, struct mlx5e_xsk_param *xsk); 82 struct mlx5e_xsk_param *xsk); 88 struct mlx5e_xsk_param *xsk); 91 struct mlx5e_xsk_param *xsk); 94 struct mlx5e_xsk_param *xsk); 97 struct mlx5e_xsk_param *xsk); 107 struct mlx5e_xsk_param *xsk); 110 struct mlx5e_xsk_param *xsk); 114 struct mlx5e_xsk_param *xsk); [all …]
|
/linux/tools/testing/selftests/bpf/prog_tests/ |
H A D | xdp_metadata.c | 7 #include "xsk.h" 49 struct xsk { struct 59 static int open_xsk(int ifindex, struct xsk *xsk) in open_xsk() argument 80 xsk->umem_area = mmap(NULL, UMEM_SIZE, PROT_READ | PROT_WRITE, mmap_flags, -1, 0); in open_xsk() 81 if (!ASSERT_NEQ(xsk->umem_area, MAP_FAILED, "mmap")) in open_xsk() 84 ret = xsk_umem__create(&xsk->umem, in open_xsk() 85 xsk->umem_area, UMEM_SIZE, in open_xsk() 86 &xsk->fill, in open_xsk() 87 &xsk in open_xsk() 51 umemxsk global() argument 52 fillxsk global() argument 53 compxsk global() argument 54 txxsk global() argument 55 rxxsk global() argument 56 socketxsk global() argument 127 close_xsk(struct xsk * xsk) close_xsk() argument 136 generate_packet(struct xsk * xsk,__u16 dst_port) generate_packet() argument 227 complete_tx(struct xsk * xsk) complete_tx() argument 248 refill_rx(struct xsk * xsk,__u64 addr) refill_rx() argument 259 verify_xsk_metadata(struct xsk * xsk,bool sent_from_af_xdp) verify_xsk_metadata() argument [all...] |
/linux/include/net/libeth/ |
H A D | xsk.h | 18 * libeth_xsk_tx_queue_head - internal helper for queueing XSk ``XDP_TX`` head 20 * @xdp: XSk buffer with the head to queue 28 .xsk = xdp, in libeth_xsk_tx_queue_head() 42 * libeth_xsk_tx_queue_frag - internal helper for queueing XSk ``XDP_TX`` frag 44 * @frag: XSk frag to queue 50 .xsk = frag, in libeth_xsk_tx_queue_frag() 56 * libeth_xsk_tx_queue_bulk - internal helper for queueing XSk ``XDP_TX`` frame 58 * @xdp: XSk buffer to queue 102 * libeth_xsk_tx_fill_buf - internal helper to fill XSk ``XDP_TX`` &libeth_sqe 115 struct libeth_xdp_buff *xdp = frm.xsk; in libeth_xsk_tx_fill_buf() [all …]
|
H A D | tx.h | 15 * @LIBETH_SQE_EMPTY: unused/empty OR XDP_TX/XSk frame, no action required 24 * @LIBETH_SQE_XSK_TX: &libeth_xdp_buff on XSk queue, xsk_buff_free(), stats 25 * @LIBETH_SQE_XSK_TX_FRAG: &libeth_xdp_buff frag on XSk queue, xsk_buff_free() 50 * @xsk: XSk Rx frame from XDP_TX action 67 struct libeth_xdp_buff *xsk; member 96 * @xdp_tx: number of XDP-not-XSk frames processed
|
H A D | xdp.h | 110 * Each RQ must have its own XDPSQ for XSk pairs, each CPU must have own XDPSQ 282 * @LIBETH_XDP_TX_XSK: whether the function is called for ``XDP_TX`` for XSk 296 * @LIBETH_XDP_TX_CSUM: for XSk xmit, enable checksum offload 297 * @LIBETH_XDP_TX_XSKMD: for XSk xmit, mask of the metadata bits 324 * @xsk: ``XDP_TX`` for XSk, XDP buffer for any frag 325 * @len: frag length for XSk ``XDP_TX`` and .ndo_xdp_xmit() 328 * @desc: XSk xmit descriptor for direct casting 342 /* .ndo_xdp_xmit(), XSk ``XDP_TX`` */ 348 struct libeth_xdp_buff *xsk; member 359 /* XSk xmit */ [all …]
|
/linux/tools/testing/selftests/bpf/ |
H A D | xsk.c | 37 #include "xsk.h" 97 int xsk_socket__fd(const struct xsk_socket *xsk) in xsk_socket__fd() argument 99 return xsk ? xsk->fd : -EINVAL; in xsk_socket__fd() 448 int xsk_update_xskmap(struct bpf_map *map, struct xsk_socket *xsk, u32 index) in xsk_update_xskmap() argument 453 sock_fd = xsk_socket__fd(xsk); in xsk_update_xskmap() 502 static struct xsk_ctx *xsk_create_ctx(struct xsk_socket *xsk, in xsk_create_ctx() argument 516 err = xsk_create_umem_rings(umem, xsk->fd, fill, comp); in xsk_create_ctx() 551 struct xsk_socket *xsk; in xsk_socket__create_shared() local 560 xsk = calloc(1, sizeof(*xsk)); in xsk_socket__create_shared() 561 if (!xsk) in xsk_socket__create_shared() [all …]
|
H A D | xdp_hw_metadata.c | 22 #include "xsk.h" 58 struct xsk { struct 70 struct xsk *rx_xsk; argument 92 static int open_xsk(int ifindex, struct xsk *xsk, __u32 queue_id) in open_xsk() argument 112 xsk->umem_area = mmap(NULL, UMEM_SIZE, PROT_READ | PROT_WRITE, mmap_flags, -1, 0); in open_xsk() 113 if (xsk->umem_area == MAP_FAILED) in open_xsk() 116 ret = xsk_umem__create(&xsk->umem, in open_xsk() 117 xsk->umem_area, UMEM_SIZE, in open_xsk() 118 &xsk->fill, in open_xsk() 119 &xsk->comp, in open_xsk() [all …]
|
H A D | xskxceiver.c | 46 * then remove xsk sockets from queue 0 on both veth interfaces and 103 #include "xsk.h" 168 static void gen_eth_hdr(struct xsk_socket_info *xsk, struct ethhdr *eth_hdr) in gen_eth_hdr() argument 170 memcpy(eth_hdr->h_dest, xsk->dst_mac, ETH_ALEN); in gen_eth_hdr() 171 memcpy(eth_hdr->h_source, xsk->src_mac, ETH_ALEN); in gen_eth_hdr() 242 static void enable_busy_poll(struct xsk_socket_info *xsk) in enable_busy_poll() argument 247 if (setsockopt(xsk_socket__fd(xsk->xsk), SOL_SOCKET, SO_PREFER_BUSY_POLL, in enable_busy_poll() 252 if (setsockopt(xsk_socket__fd(xsk->xsk), SOL_SOCKET, SO_BUSY_POLL, in enable_busy_poll() 256 sock_opt = xsk->batch_size; in enable_busy_poll() 257 if (setsockopt(xsk_socket__fd(xsk->xsk), SOL_SOCKET, SO_BUSY_POLL_BUDGET, in enable_busy_poll() [all …]
|
H A D | xsk.h | 188 int xsk_socket__fd(const struct xsk_socket *xsk); 208 int xsk_update_xskmap(struct bpf_map *map, struct xsk_socket *xsk, u32 index); 224 int xsk_socket__create(struct xsk_socket **xsk, 241 void xsk_socket__delete(struct xsk_socket *xsk);
|
/linux/Documentation/bpf/ |
H A D | map_xskmap.rst | 21 | xsk A | xsk B | xsk C |<---+ User space 28 | | key | xsk | | | 30 | | | | 0 | xsk A | | | 32 | | | | 1 | xsk B | | | 34 | | prog | | 2 | xsk C | | 48 Typically an XSKMAP is created per netdev. This map contains an array of XSK File 68 For ``BPF_MAP_TYPE_XSKMAP`` this map contains references to XSK FDs 73 necessary to have an XDP program loaded with at least one XSK in the 82 XSK entry references of type ``struct xdp_sock *`` can be retrieved using the 88 XSK entries can only be updated/deleted from user space and not from [all …]
|
/linux/drivers/net/ethernet/intel/libeth/ |
H A D | xsk.c | 8 #include <net/libeth/xsk.h> 18 libeth_xsk_buff_free_slow(bq[i].xsk); in libeth_xsk_tx_return_bulk() 21 /* XSk TMO */ 30 * libeth_xsk_buff_free_slow - free an XSk Rx buffer 43 * libeth_xsk_buff_add_frag - add frag to XSk Rx buffer 70 * libeth_xsk_buff_stats_frags - update onstack RQ stats with XSk frags info 92 * ``XDP_REDIRECT`` is the most common and hottest verdict on XSk, thus 120 * libeth_xsk_prog_exception - handle XDP prog exceptions on XSk 125 * Internal. Frees the buffer and, if the queue uses XSk wakeups, stop the 133 const struct xdp_buff_xsk *xsk; in libeth_xsk_prog_exception() local [all …]
|
H A D | tx.c | 13 DEFINE_STATIC_CALL_NULL(xsk, libeth_xsk_buff_free_slow); 28 static_call(xsk)); in libeth_tx_complete_any() 39 static_call_update(xsk, ops ? ops->xsk : NULL); in libeth_attach_xdp()
|
/linux/tools/testing/selftests/bpf/progs/ |
H A D | xsk_xdp_progs.c | 16 } xsk SEC(".maps"); 24 return bpf_redirect_map(&xsk, 0, XDP_DROP); in xsk_xdp_drop() 33 return bpf_redirect_map(&xsk, 0, XDP_DROP); in xsk_xdp_populate_metadata() 56 return bpf_redirect_map(&xsk, 0, XDP_DROP); in xsk_xdp_shared_umem() 73 return bpf_redirect_map(&xsk, idx, XDP_DROP); 93 return bpf_redirect_map(&xsk, 0, XDP_DROP); 120 return bpf_redirect_map(&xsk, 0, XDP_DROP);
|
H A D | xdp_metadata.c | 13 } xsk SEC(".maps"); 102 return bpf_redirect_map(&xsk, ctx->rx_queue_index, XDP_PASS);
|
/linux/Documentation/networking/ |
H A D | af_xdp.rst | 23 An AF_XDP socket (XSK) is created with the normal socket() 24 syscall. Associated with each XSK are two rings: the RX ring and the 60 call and submits the XSK of the process it would like to share UMEM 61 with as well as its own newly created XSK socket. The new process will 72 user-space application can place an XSK at an arbitrary place in this 74 this map and at this point XDP validates that the XSK in that map was 78 program loaded (and one XSK in the XSKMAP) to be able to get any 79 traffic to user space through the XSK. 212 in tools/testing/selftests/bpf/xsk.h for facilitating the use of 532 On the Rx path in copy-mode, the xsk core copies the XDP data into [all …]
|
H A D | xdp-rx-metadata.rst | 61 program that redirects XDP frames into the ``AF_XDP`` socket (``XSK``) and 64 of kfuncs to populate it. The userspace ``XSK`` consumer computes 107 in its ``skb``. If such a packet is later redirected into an ``XSK``,
|
/linux/Documentation/netlink/specs/ |
H A D | netdev.yaml | 28 name: xsk-zerocopy 66 name: xsk-flags 124 name: xsk-features 127 enum: xsk-flags 298 name: xsk-info 320 the xsk attribute. 337 name: xsk 338 doc: XSK information for this queue, if any. 340 nested-attributes: xsk-info 581 - xsk-features [all …]
|
/linux/tools/testing/selftests/drivers/net/ |
H A D | queues.py | 51 ksft_eq(q.get('xsk', None), {}, 52 comment="xsk attr on queue we configured") 54 ksft_not_in('xsk', q, 55 comment="xsk attr on queue we didn't configure")
|
/linux/drivers/net/ethernet/intel/ice/ |
H A D | ice_xsk.c | 309 * ice_realloc_rx_xdp_bufs - reallocate for either XSK or normal buffer 311 * @pool_present: is pool for XSK present 345 * Reallocate buffer for rx_rings that might be used by XSK. 425 * ice_fill_rx_descs - pick buffers from XSK buffer pool and use it 426 * @pool: XSK Buffer pool to pull the buffers from 466 * @xsk_pool: XSK buffer pool to pick buffers to be filled by HW 517 * @xsk_pool: XSK buffer pool to pick buffers to be filled by HW 955 * @xsk_pool: XSK buffer pool to pick buffers to be consumed by HW 980 * @xsk_pool: XSK buffer pool to pick buffers to be consumed by HW 1014 * @xsk_pool: XSK buffer pool to pick buffers to be consumed by HW [all …]
|
/linux/drivers/net/ethernet/engleder/ |
H A D | tsnep_xdp.c | 35 "XSK support only for TX/RX queue pairs\n"); in tsnep_xdp_enable_pool() 43 netdev_err(adapter->netdev, "failed to map XSK pool\n"); in tsnep_xdp_enable_pool()
|