Skip to content

Commit 99ffc5a

Browse files
netoptimizerAlexei Starovoitov
authored andcommitted
ixgbe: setup xdp_rxq_info
Driver hook points for xdp_rxq_info: * reg : ixgbe_setup_rx_resources() * unreg: ixgbe_free_rx_resources() Tested on actual hardware. V2: Fix ixgbe_set_ringparam, clear xdp_rxq_info in temp_ring Cc: [email protected] Cc: Jeff Kirsher <[email protected]> Cc: Alexander Duyck <[email protected]> Signed-off-by: Jesper Dangaard Brouer <[email protected]> Acked-by: John Fastabend <[email protected]> Signed-off-by: Alexei Starovoitov <[email protected]>
1 parent 8712882 commit 99ffc5a

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

drivers/net/ethernet/intel/ixgbe/ixgbe.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
#include <linux/dca.h>
5454
#endif
5555

56+
#include <net/xdp.h>
5657
#include <net/busy_poll.h>
5758

5859
/* common prefix used by pr_<> macros */
@@ -371,6 +372,7 @@ struct ixgbe_ring {
371372
struct ixgbe_tx_queue_stats tx_stats;
372373
struct ixgbe_rx_queue_stats rx_stats;
373374
};
375+
struct xdp_rxq_info xdp_rxq;
374376
} ____cacheline_internodealigned_in_smp;
375377

376378
enum ixgbe_ring_f_enum {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1156,6 +1156,10 @@ static int ixgbe_set_ringparam(struct net_device *netdev,
11561156
memcpy(&temp_ring[i], adapter->rx_ring[i],
11571157
sizeof(struct ixgbe_ring));
11581158

1159+
/* Clear copied XDP RX-queue info */
1160+
memset(&temp_ring[i].xdp_rxq, 0,
1161+
sizeof(temp_ring[i].xdp_rxq));
1162+
11591163
temp_ring[i].count = new_rx_count;
11601164
err = ixgbe_setup_rx_resources(adapter, &temp_ring[i]);
11611165
if (err) {

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2318,12 +2318,14 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
23182318
#endif /* IXGBE_FCOE */
23192319
u16 cleaned_count = ixgbe_desc_unused(rx_ring);
23202320
bool xdp_xmit = false;
2321+
struct xdp_buff xdp;
2322+
2323+
xdp.rxq = &rx_ring->xdp_rxq;
23212324

23222325
while (likely(total_rx_packets < budget)) {
23232326
union ixgbe_adv_rx_desc *rx_desc;
23242327
struct ixgbe_rx_buffer *rx_buffer;
23252328
struct sk_buff *skb;
2326-
struct xdp_buff xdp;
23272329
unsigned int size;
23282330

23292331
/* return some buffers to hardware, one at a time is too slow */
@@ -6444,6 +6446,11 @@ int ixgbe_setup_rx_resources(struct ixgbe_adapter *adapter,
64446446
rx_ring->next_to_clean = 0;
64456447
rx_ring->next_to_use = 0;
64466448

6449+
/* XDP RX-queue info */
6450+
if (xdp_rxq_info_reg(&rx_ring->xdp_rxq, adapter->netdev,
6451+
rx_ring->queue_index) < 0)
6452+
goto err;
6453+
64476454
rx_ring->xdp_prog = adapter->xdp_prog;
64486455

64496456
return 0;
@@ -6541,6 +6548,7 @@ void ixgbe_free_rx_resources(struct ixgbe_ring *rx_ring)
65416548
ixgbe_clean_rx_ring(rx_ring);
65426549

65436550
rx_ring->xdp_prog = NULL;
6551+
xdp_rxq_info_unreg(&rx_ring->xdp_rxq);
65446552
vfree(rx_ring->rx_buffer_info);
65456553
rx_ring->rx_buffer_info = NULL;
65466554

0 commit comments

Comments
 (0)