xref: /linux/drivers/net/ethernet/intel/libeth/xsk.c (revision b3ad8450b4dc46c4ab0641f665068fd2a4d1adba)
1*b3ad8450SAlexander Lobakin // SPDX-License-Identifier: GPL-2.0-only
2*b3ad8450SAlexander Lobakin /* Copyright (C) 2025 Intel Corporation */
3*b3ad8450SAlexander Lobakin 
4*b3ad8450SAlexander Lobakin #define DEFAULT_SYMBOL_NAMESPACE	"LIBETH_XDP"
5*b3ad8450SAlexander Lobakin 
6*b3ad8450SAlexander Lobakin #include <linux/export.h>
7*b3ad8450SAlexander Lobakin 
8*b3ad8450SAlexander Lobakin #include <net/libeth/xsk.h>
9*b3ad8450SAlexander Lobakin 
10*b3ad8450SAlexander Lobakin #include "priv.h"
11*b3ad8450SAlexander Lobakin 
12*b3ad8450SAlexander Lobakin /* ``XDP_TX`` bulking */
13*b3ad8450SAlexander Lobakin 
14*b3ad8450SAlexander Lobakin void __cold libeth_xsk_tx_return_bulk(const struct libeth_xdp_tx_frame *bq,
15*b3ad8450SAlexander Lobakin 				      u32 count)
16*b3ad8450SAlexander Lobakin {
17*b3ad8450SAlexander Lobakin 	for (u32 i = 0; i < count; i++)
18*b3ad8450SAlexander Lobakin 		libeth_xsk_buff_free_slow(bq[i].xsk);
19*b3ad8450SAlexander Lobakin }
20*b3ad8450SAlexander Lobakin 
21*b3ad8450SAlexander Lobakin /* Rx polling path */
22*b3ad8450SAlexander Lobakin 
23*b3ad8450SAlexander Lobakin /**
24*b3ad8450SAlexander Lobakin  * libeth_xsk_buff_free_slow - free an XSk Rx buffer
25*b3ad8450SAlexander Lobakin  * @xdp: buffer to free
26*b3ad8450SAlexander Lobakin  *
27*b3ad8450SAlexander Lobakin  * Slowpath version of xsk_buff_free() to be used on exceptions, cleanups etc.
28*b3ad8450SAlexander Lobakin  * to avoid unwanted inlining.
29*b3ad8450SAlexander Lobakin  */
30*b3ad8450SAlexander Lobakin void libeth_xsk_buff_free_slow(struct libeth_xdp_buff *xdp)
31*b3ad8450SAlexander Lobakin {
32*b3ad8450SAlexander Lobakin 	xsk_buff_free(&xdp->base);
33*b3ad8450SAlexander Lobakin }
34*b3ad8450SAlexander Lobakin EXPORT_SYMBOL_GPL(libeth_xsk_buff_free_slow);
35