mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

Using examples of other driver(s), add the ability to hot-swap an XDP program without having to reconfigure the queues. To prevent the q->xdp_prog to be read/written more than once use READ_ONCE() and WRITE_ONCE() on the q->xdp_prog. The q->xdp_prog was being checked in multiple different for loops in the hot path. The change to allow xdp_prog hot swapping created the possibility for many READ_ONCE(q->xdp_prog) calls during a single napi callback. Refactor the Rx napi handling to allow a previous READ_ONCE(q->xdp_prog) (or NULL for hwstamp_rxq) to be passed into the relevant functions. Also, move other Rx related hotpath handling into the newly created ionic_rx_cq_service() function to reduce the scope of the xdp_prog local variable and put all Rx handling in one function similar to Tx. Signed-off-by: Brett Creeley <brett.creeley@amd.com> Signed-off-by: Shannon Nelson <shannon.nelson@amd.com> Link: https://patch.msgid.link/20240906232623.39651-8-brett.creeley@amd.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
22 lines
773 B
C
22 lines
773 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* Copyright(c) 2017 - 2019 Pensando Systems, Inc */
|
|
|
|
#ifndef _IONIC_TXRX_H_
|
|
#define _IONIC_TXRX_H_
|
|
|
|
struct bpf_prog;
|
|
|
|
void ionic_tx_flush(struct ionic_cq *cq);
|
|
|
|
void ionic_rx_fill(struct ionic_queue *q, struct bpf_prog *xdp_prog);
|
|
void ionic_rx_empty(struct ionic_queue *q);
|
|
void ionic_tx_empty(struct ionic_queue *q);
|
|
int ionic_rx_napi(struct napi_struct *napi, int budget);
|
|
int ionic_tx_napi(struct napi_struct *napi, int budget);
|
|
int ionic_txrx_napi(struct napi_struct *napi, int budget);
|
|
netdev_tx_t ionic_start_xmit(struct sk_buff *skb, struct net_device *netdev);
|
|
|
|
bool ionic_rx_service(struct ionic_cq *cq);
|
|
|
|
int ionic_xdp_xmit(struct net_device *netdev, int n, struct xdp_frame **xdp, u32 flags);
|
|
#endif /* _IONIC_TXRX_H_ */
|