bnxt_en: setup xdp_rxq_info
Driver hook points for xdp_rxq_info: * reg : bnxt_alloc_rx_rings * unreg: bnxt_free_rx_rings This driver should be updated to re-register when changing allocation mode of RX rings. Tested on actual hardware. Cc: Andy Gospodarek <andy@greyhouse.net> Cc: Michael Chan <michael.chan@broadcom.com> Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
ae75415de1
commit
96a8604f95
|
@ -2247,6 +2247,9 @@ static void bnxt_free_rx_rings(struct bnxt *bp)
|
|||
if (rxr->xdp_prog)
|
||||
bpf_prog_put(rxr->xdp_prog);
|
||||
|
||||
if (xdp_rxq_info_is_reg(&rxr->xdp_rxq))
|
||||
xdp_rxq_info_unreg(&rxr->xdp_rxq);
|
||||
|
||||
kfree(rxr->rx_tpa);
|
||||
rxr->rx_tpa = NULL;
|
||||
|
||||
|
@ -2280,6 +2283,10 @@ static int bnxt_alloc_rx_rings(struct bnxt *bp)
|
|||
|
||||
ring = &rxr->rx_ring_struct;
|
||||
|
||||
rc = xdp_rxq_info_reg(&rxr->xdp_rxq, bp->dev, i);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
rc = bnxt_alloc_ring(bp, ring);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
@ -2834,6 +2841,9 @@ void bnxt_set_ring_params(struct bnxt *bp)
|
|||
bp->cp_ring_mask = bp->cp_bit - 1;
|
||||
}
|
||||
|
||||
/* Changing allocation mode of RX rings.
|
||||
* TODO: Update when extending xdp_rxq_info to support allocation modes.
|
||||
*/
|
||||
int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode)
|
||||
{
|
||||
if (page_mode) {
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include <net/devlink.h>
|
||||
#include <net/dst_metadata.h>
|
||||
#include <net/switchdev.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
struct tx_bd {
|
||||
__le32 tx_bd_len_flags_type;
|
||||
|
@ -664,6 +665,7 @@ struct bnxt_rx_ring_info {
|
|||
|
||||
struct bnxt_ring_struct rx_ring_struct;
|
||||
struct bnxt_ring_struct rx_agg_ring_struct;
|
||||
struct xdp_rxq_info xdp_rxq;
|
||||
};
|
||||
|
||||
struct bnxt_cp_ring_info {
|
||||
|
|
|
@ -96,6 +96,7 @@ bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons,
|
|||
xdp.data = *data_ptr;
|
||||
xdp_set_data_meta_invalid(&xdp);
|
||||
xdp.data_end = *data_ptr + *len;
|
||||
xdp.rxq = &rxr->xdp_rxq;
|
||||
orig_data = xdp.data;
|
||||
mapping = rx_buf->mapping - bp->rx_dma_offset;
|
||||
|
||||
|
|
Loading…
Reference in New Issue