diff options
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt.c | 10 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt.h | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 1 |
3 files changed, 13 insertions, 0 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 9efbdc6f1fcb..89c3c8760a78 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c | |||
@@ -2247,6 +2247,9 @@ static void bnxt_free_rx_rings(struct bnxt *bp) | |||
2247 | if (rxr->xdp_prog) | 2247 | if (rxr->xdp_prog) |
2248 | bpf_prog_put(rxr->xdp_prog); | 2248 | bpf_prog_put(rxr->xdp_prog); |
2249 | 2249 | ||
2250 | if (xdp_rxq_info_is_reg(&rxr->xdp_rxq)) | ||
2251 | xdp_rxq_info_unreg(&rxr->xdp_rxq); | ||
2252 | |||
2250 | kfree(rxr->rx_tpa); | 2253 | kfree(rxr->rx_tpa); |
2251 | rxr->rx_tpa = NULL; | 2254 | rxr->rx_tpa = NULL; |
2252 | 2255 | ||
@@ -2280,6 +2283,10 @@ static int bnxt_alloc_rx_rings(struct bnxt *bp) | |||
2280 | 2283 | ||
2281 | ring = &rxr->rx_ring_struct; | 2284 | ring = &rxr->rx_ring_struct; |
2282 | 2285 | ||
2286 | rc = xdp_rxq_info_reg(&rxr->xdp_rxq, bp->dev, i); | ||
2287 | if (rc < 0) | ||
2288 | return rc; | ||
2289 | |||
2283 | rc = bnxt_alloc_ring(bp, ring); | 2290 | rc = bnxt_alloc_ring(bp, ring); |
2284 | if (rc) | 2291 | if (rc) |
2285 | return rc; | 2292 | return rc; |
@@ -2834,6 +2841,9 @@ void bnxt_set_ring_params(struct bnxt *bp) | |||
2834 | bp->cp_ring_mask = bp->cp_bit - 1; | 2841 | bp->cp_ring_mask = bp->cp_bit - 1; |
2835 | } | 2842 | } |
2836 | 2843 | ||
2844 | /* Changing allocation mode of RX rings. | ||
2845 | * TODO: Update when extending xdp_rxq_info to support allocation modes. | ||
2846 | */ | ||
2837 | int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode) | 2847 | int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode) |
2838 | { | 2848 | { |
2839 | if (page_mode) { | 2849 | if (page_mode) { |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h index 5359a1f0045f..2d268fc26f5e 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <net/devlink.h> | 23 | #include <net/devlink.h> |
24 | #include <net/dst_metadata.h> | 24 | #include <net/dst_metadata.h> |
25 | #include <net/switchdev.h> | 25 | #include <net/switchdev.h> |
26 | #include <net/xdp.h> | ||
26 | 27 | ||
27 | struct tx_bd { | 28 | struct tx_bd { |
28 | __le32 tx_bd_len_flags_type; | 29 | __le32 tx_bd_len_flags_type; |
@@ -664,6 +665,7 @@ struct bnxt_rx_ring_info { | |||
664 | 665 | ||
665 | struct bnxt_ring_struct rx_ring_struct; | 666 | struct bnxt_ring_struct rx_ring_struct; |
666 | struct bnxt_ring_struct rx_agg_ring_struct; | 667 | struct bnxt_ring_struct rx_agg_ring_struct; |
668 | struct xdp_rxq_info xdp_rxq; | ||
667 | }; | 669 | }; |
668 | 670 | ||
669 | struct bnxt_cp_ring_info { | 671 | struct bnxt_cp_ring_info { |
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c index 261e5847557a..1389ab5e05df 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | |||
@@ -96,6 +96,7 @@ bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons, | |||
96 | xdp.data = *data_ptr; | 96 | xdp.data = *data_ptr; |
97 | xdp_set_data_meta_invalid(&xdp); | 97 | xdp_set_data_meta_invalid(&xdp); |
98 | xdp.data_end = *data_ptr + *len; | 98 | xdp.data_end = *data_ptr + *len; |
99 | xdp.rxq = &rxr->xdp_rxq; | ||
99 | orig_data = xdp.data; | 100 | orig_data = xdp.data; |
100 | mapping = rx_buf->mapping - bp->rx_dma_offset; | 101 | mapping = rx_buf->mapping - bp->rx_dma_offset; |
101 | 102 | ||