Skip to content

Commit 25e8470

Browse files
LorenzoBianconiborkmann
authored andcommitted
net, xdp: Introduce xdp_init_buff utility routine
Introduce xdp_init_buff utility routine to initialize xdp_buff fields const over NAPI iterations (e.g. frame_sz or rxq pointer). Rely on xdp_init_buff in all XDP capable drivers. Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Reviewed-by: Alexander Duyck <alexanderduyck@fb.com> Acked-by: Jesper Dangaard Brouer <brouer@redhat.com> Acked-by: John Fastabend <john.fastabend@gmail.com> Acked-by: Shay Agroskin <shayagr@amazon.com> Acked-by: Martin Habets <habetsm.xilinx@gmail.com> Acked-by: Camelia Groza <camelia.groza@nxp.com> Acked-by: Marcin Wojtas <mw@semihalf.com> Link: https://lore.kernel.org/bpf/7f8329b6da1434dc2b05a77f2e800b29628a8913.1608670965.git.lorenzo@kernel.org
1 parent f734031 commit 25e8470

File tree

28 files changed

+68
-72
lines changed

28 files changed

+68
-72
lines changed

drivers/net/ethernet/amazon/ena/ena_netdev.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1634,8 +1634,7 @@ static int ena_clean_rx_irq(struct ena_ring *rx_ring, struct napi_struct *napi,
16341634
netif_dbg(rx_ring->adapter, rx_status, rx_ring->netdev,
16351635
"%s qid %d\n", __func__, rx_ring->qid);
16361636
res_budget = budget;
1637-
xdp.rxq = &rx_ring->xdp_rxq;
1638-
xdp.frame_sz = ENA_PAGE_SIZE;
1637+
xdp_init_buff(&xdp, ENA_PAGE_SIZE, &rx_ring->xdp_rxq);
16391638

16401639
do {
16411640
xdp_verdict = XDP_PASS;

drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,12 +133,12 @@ bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons,
133133
dma_sync_single_for_cpu(&pdev->dev, mapping + offset, *len, bp->rx_dir);
134134

135135
txr = rxr->bnapi->tx_ring;
136+
/* BNXT_RX_PAGE_MODE(bp) when XDP enabled */
137+
xdp_init_buff(&xdp, PAGE_SIZE, &rxr->xdp_rxq);
136138
xdp.data_hard_start = *data_ptr - offset;
137139
xdp.data = *data_ptr;
138140
xdp_set_data_meta_invalid(&xdp);
139141
xdp.data_end = *data_ptr + *len;
140-
xdp.rxq = &rxr->xdp_rxq;
141-
xdp.frame_sz = PAGE_SIZE; /* BNXT_RX_PAGE_MODE(bp) when XDP enabled */
142142
orig_data = xdp.data;
143143

144144
rcu_read_lock();

drivers/net/ethernet/cavium/thunder/nicvf_main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -547,12 +547,12 @@ static inline bool nicvf_xdp_rx(struct nicvf *nic, struct bpf_prog *prog,
547547
cpu_addr = (u64)phys_to_virt(cpu_addr);
548548
page = virt_to_page((void *)cpu_addr);
549549

550+
xdp_init_buff(&xdp, RCV_FRAG_LEN + XDP_PACKET_HEADROOM,
551+
&rq->xdp_rxq);
550552
xdp.data_hard_start = page_address(page);
551553
xdp.data = (void *)cpu_addr;
552554
xdp_set_data_meta_invalid(&xdp);
553555
xdp.data_end = xdp.data + len;
554-
xdp.rxq = &rq->xdp_rxq;
555-
xdp.frame_sz = RCV_FRAG_LEN + XDP_PACKET_HEADROOM;
556556
orig_data = xdp.data;
557557

558558
rcu_read_lock();

drivers/net/ethernet/freescale/dpaa/dpaa_eth.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2532,12 +2532,12 @@ static u32 dpaa_run_xdp(struct dpaa_priv *priv, struct qm_fd *fd, void *vaddr,
25322532
return XDP_PASS;
25332533
}
25342534

2535+
xdp_init_buff(&xdp, DPAA_BP_RAW_SIZE - DPAA_TX_PRIV_DATA_SIZE,
2536+
&dpaa_fq->xdp_rxq);
25352537
xdp.data = vaddr + fd_off;
25362538
xdp.data_meta = xdp.data;
25372539
xdp.data_hard_start = xdp.data - XDP_PACKET_HEADROOM;
25382540
xdp.data_end = xdp.data + qm_fd_get_length(fd);
2539-
xdp.frame_sz = DPAA_BP_RAW_SIZE - DPAA_TX_PRIV_DATA_SIZE;
2540-
xdp.rxq = &dpaa_fq->xdp_rxq;
25412541

25422542
/* We reserve a fixed headroom of 256 bytes under the erratum and we
25432543
* offer it all to XDP programs to use. If no room is left for the

drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -358,14 +358,14 @@ static u32 dpaa2_eth_run_xdp(struct dpaa2_eth_priv *priv,
358358
if (!xdp_prog)
359359
goto out;
360360

361+
xdp_init_buff(&xdp,
362+
DPAA2_ETH_RX_BUF_RAW_SIZE -
363+
(dpaa2_fd_get_offset(fd) - XDP_PACKET_HEADROOM),
364+
&ch->xdp_rxq);
361365
xdp.data = vaddr + dpaa2_fd_get_offset(fd);
362366
xdp.data_end = xdp.data + dpaa2_fd_get_len(fd);
363367
xdp.data_hard_start = xdp.data - XDP_PACKET_HEADROOM;
364368
xdp_set_data_meta_invalid(&xdp);
365-
xdp.rxq = &ch->xdp_rxq;
366-
367-
xdp.frame_sz = DPAA2_ETH_RX_BUF_RAW_SIZE -
368-
(dpaa2_fd_get_offset(fd) - XDP_PACKET_HEADROOM);
369369

370370
xdp_act = bpf_prog_run_xdp(xdp_prog, &xdp);
371371

drivers/net/ethernet/intel/i40e/i40e_txrx.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2344,17 +2344,17 @@ static void i40e_inc_ntc(struct i40e_ring *rx_ring)
23442344
**/
23452345
static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget)
23462346
{
2347-
unsigned int total_rx_bytes = 0, total_rx_packets = 0;
2347+
unsigned int total_rx_bytes = 0, total_rx_packets = 0, frame_sz = 0;
23482348
struct sk_buff *skb = rx_ring->skb;
23492349
u16 cleaned_count = I40E_DESC_UNUSED(rx_ring);
23502350
unsigned int xdp_xmit = 0;
23512351
bool failure = false;
23522352
struct xdp_buff xdp;
23532353

23542354
#if (PAGE_SIZE < 8192)
2355-
xdp.frame_sz = i40e_rx_frame_truesize(rx_ring, 0);
2355+
frame_sz = i40e_rx_frame_truesize(rx_ring, 0);
23562356
#endif
2357-
xdp.rxq = &rx_ring->xdp_rxq;
2357+
xdp_init_buff(&xdp, frame_sz, &rx_ring->xdp_rxq);
23582358

23592359
while (likely(total_rx_packets < (unsigned int)budget)) {
23602360
struct i40e_rx_buffer *rx_buffer;

drivers/net/ethernet/intel/ice/ice_txrx.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1089,18 +1089,18 @@ ice_is_non_eop(struct ice_ring *rx_ring, union ice_32b_rx_flex_desc *rx_desc,
10891089
*/
10901090
int ice_clean_rx_irq(struct ice_ring *rx_ring, int budget)
10911091
{
1092-
unsigned int total_rx_bytes = 0, total_rx_pkts = 0;
1092+
unsigned int total_rx_bytes = 0, total_rx_pkts = 0, frame_sz = 0;
10931093
u16 cleaned_count = ICE_DESC_UNUSED(rx_ring);
10941094
unsigned int xdp_res, xdp_xmit = 0;
10951095
struct bpf_prog *xdp_prog = NULL;
10961096
struct xdp_buff xdp;
10971097
bool failure;
10981098

1099-
xdp.rxq = &rx_ring->xdp_rxq;
11001099
/* Frame size depend on rx_ring setup when PAGE_SIZE=4K */
11011100
#if (PAGE_SIZE < 8192)
1102-
xdp.frame_sz = ice_rx_frame_truesize(rx_ring, 0);
1101+
frame_sz = ice_rx_frame_truesize(rx_ring, 0);
11031102
#endif
1103+
xdp_init_buff(&xdp, frame_sz, &rx_ring->xdp_rxq);
11041104

11051105
/* start the loop to process Rx packets bounded by 'budget' */
11061106
while (likely(total_rx_pkts < (unsigned int)budget)) {

drivers/net/ethernet/intel/igb/igb_main.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8681,13 +8681,13 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)
86818681
u16 cleaned_count = igb_desc_unused(rx_ring);
86828682
unsigned int xdp_xmit = 0;
86838683
struct xdp_buff xdp;
8684-
8685-
xdp.rxq = &rx_ring->xdp_rxq;
8684+
u32 frame_sz = 0;
86868685

86878686
/* Frame size depend on rx_ring setup when PAGE_SIZE=4K */
86888687
#if (PAGE_SIZE < 8192)
8689-
xdp.frame_sz = igb_rx_frame_truesize(rx_ring, 0);
8688+
frame_sz = igb_rx_frame_truesize(rx_ring, 0);
86908689
#endif
8690+
xdp_init_buff(&xdp, frame_sz, &rx_ring->xdp_rxq);
86918691

86928692
while (likely(total_packets < budget)) {
86938693
union e1000_adv_rx_desc *rx_desc;

drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2291,7 +2291,7 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
22912291
struct ixgbe_ring *rx_ring,
22922292
const int budget)
22932293
{
2294-
unsigned int total_rx_bytes = 0, total_rx_packets = 0;
2294+
unsigned int total_rx_bytes = 0, total_rx_packets = 0, frame_sz = 0;
22952295
struct ixgbe_adapter *adapter = q_vector->adapter;
22962296
#ifdef IXGBE_FCOE
22972297
int ddp_bytes;
@@ -2301,12 +2301,11 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
23012301
unsigned int xdp_xmit = 0;
23022302
struct xdp_buff xdp;
23032303

2304-
xdp.rxq = &rx_ring->xdp_rxq;
2305-
23062304
/* Frame size depend on rx_ring setup when PAGE_SIZE=4K */
23072305
#if (PAGE_SIZE < 8192)
2308-
xdp.frame_sz = ixgbe_rx_frame_truesize(rx_ring, 0);
2306+
frame_sz = ixgbe_rx_frame_truesize(rx_ring, 0);
23092307
#endif
2308+
xdp_init_buff(&xdp, frame_sz, &rx_ring->xdp_rxq);
23102309

23112310
while (likely(total_rx_packets < budget)) {
23122311
union ixgbe_adv_rx_desc *rx_desc;

drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,19 +1121,18 @@ static int ixgbevf_clean_rx_irq(struct ixgbevf_q_vector *q_vector,
11211121
struct ixgbevf_ring *rx_ring,
11221122
int budget)
11231123
{
1124-
unsigned int total_rx_bytes = 0, total_rx_packets = 0;
1124+
unsigned int total_rx_bytes = 0, total_rx_packets = 0, frame_sz = 0;
11251125
struct ixgbevf_adapter *adapter = q_vector->adapter;
11261126
u16 cleaned_count = ixgbevf_desc_unused(rx_ring);
11271127
struct sk_buff *skb = rx_ring->skb;
11281128
bool xdp_xmit = false;
11291129
struct xdp_buff xdp;
11301130

1131-
xdp.rxq = &rx_ring->xdp_rxq;
1132-
11331131
/* Frame size depend on rx_ring setup when PAGE_SIZE=4K */
11341132
#if (PAGE_SIZE < 8192)
1135-
xdp.frame_sz = ixgbevf_rx_frame_truesize(rx_ring, 0);
1133+
frame_sz = ixgbevf_rx_frame_truesize(rx_ring, 0);
11361134
#endif
1135+
xdp_init_buff(&xdp, frame_sz, &rx_ring->xdp_rxq);
11371136

11381137
while (likely(total_rx_packets < budget)) {
11391138
struct ixgbevf_rx_buffer *rx_buffer;

0 commit comments

Comments
 (0)