nfp: setup xdp_rxq_info
Driver hook points for xdp_rxq_info: * reg : nfp_net_rx_ring_alloc * unreg: nfp_net_rx_ring_free In struct nfp_net_rx_ring moved member @size into a hole on 64-bit. Thus, the size remaines the same after adding member @xdp_rxq. Cc: oss-drivers@netronome.com Cc: Jakub Kicinski <jakub.kicinski@netronome.com> Cc: Simon Horman <simon.horman@netronome.com> Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
96a8604f95
commit
7f1c684a89
|
@ -47,6 +47,7 @@
|
|||
#include <linux/netdevice.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/io-64-nonatomic-hi-lo.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
#include "nfp_net_ctrl.h"
|
||||
|
||||
|
@ -350,6 +351,7 @@ struct nfp_net_rx_buf {
|
|||
* @rxds: Virtual address of FL/RX ring in host memory
|
||||
* @dma: DMA address of the FL/RX ring
|
||||
* @size: Size, in bytes, of the FL/RX ring (needed to free)
|
||||
* @xdp_rxq: RX-ring info avail for XDP
|
||||
*/
|
||||
struct nfp_net_rx_ring {
|
||||
struct nfp_net_r_vector *r_vec;
|
||||
|
@ -361,13 +363,14 @@ struct nfp_net_rx_ring {
|
|||
u32 idx;
|
||||
|
||||
int fl_qcidx;
|
||||
unsigned int size;
|
||||
u8 __iomem *qcp_fl;
|
||||
|
||||
struct nfp_net_rx_buf *rxbufs;
|
||||
struct nfp_net_rx_desc *rxds;
|
||||
|
||||
dma_addr_t dma;
|
||||
unsigned int size;
|
||||
struct xdp_rxq_info xdp_rxq;
|
||||
} ____cacheline_aligned;
|
||||
|
||||
/**
|
||||
|
|
|
@ -1608,11 +1608,13 @@ static int nfp_net_rx(struct nfp_net_rx_ring *rx_ring, int budget)
|
|||
unsigned int true_bufsz;
|
||||
struct sk_buff *skb;
|
||||
int pkts_polled = 0;
|
||||
struct xdp_buff xdp;
|
||||
int idx;
|
||||
|
||||
rcu_read_lock();
|
||||
xdp_prog = READ_ONCE(dp->xdp_prog);
|
||||
true_bufsz = xdp_prog ? PAGE_SIZE : dp->fl_bufsz;
|
||||
xdp.rxq = &rx_ring->xdp_rxq;
|
||||
tx_ring = r_vec->xdp_ring;
|
||||
|
||||
while (pkts_polled < budget) {
|
||||
|
@ -1703,7 +1705,6 @@ static int nfp_net_rx(struct nfp_net_rx_ring *rx_ring, int budget)
|
|||
dp->bpf_offload_xdp) && !meta.portid) {
|
||||
void *orig_data = rxbuf->frag + pkt_off;
|
||||
unsigned int dma_off;
|
||||
struct xdp_buff xdp;
|
||||
int act;
|
||||
|
||||
xdp.data_hard_start = rxbuf->frag + NFP_NET_RX_BUF_HEADROOM;
|
||||
|
@ -2252,6 +2253,7 @@ static void nfp_net_rx_ring_free(struct nfp_net_rx_ring *rx_ring)
|
|||
struct nfp_net_r_vector *r_vec = rx_ring->r_vec;
|
||||
struct nfp_net_dp *dp = &r_vec->nfp_net->dp;
|
||||
|
||||
xdp_rxq_info_unreg(&rx_ring->xdp_rxq);
|
||||
kfree(rx_ring->rxbufs);
|
||||
|
||||
if (rx_ring->rxds)
|
||||
|
@ -2275,7 +2277,11 @@ static void nfp_net_rx_ring_free(struct nfp_net_rx_ring *rx_ring)
|
|||
static int
|
||||
nfp_net_rx_ring_alloc(struct nfp_net_dp *dp, struct nfp_net_rx_ring *rx_ring)
|
||||
{
|
||||
int sz;
|
||||
int sz, err;
|
||||
|
||||
err = xdp_rxq_info_reg(&rx_ring->xdp_rxq, dp->netdev, rx_ring->idx);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
rx_ring->cnt = dp->rxd_cnt;
|
||||
rx_ring->size = sizeof(*rx_ring->rxds) * rx_ring->cnt;
|
||||
|
|
Loading…
Reference in New Issue