aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Kicinski <jakub.kicinski@netronome.com>2018-01-10 07:25:54 -0500
committerDaniel Borkmann <daniel@iogearbox.net>2018-01-10 07:49:35 -0500
commita9c324be72b2243e1cddd3f9e7356849de39ae53 (patch)
tree78de961228bbbaed2be5020f29e2f68c5cf5a4a0
parent148989d8bac36a5f9823715c9910adedbe847ae6 (diff)
nfp: don't try to register XDP rxq structures on control queues
Some RX rings are used for control messages, those will not have a netdev pointer in dp. Skip XDP rxq handling on those rings. Fixes: 7f1c684a8966 ("nfp: setup xdp_rxq_info") Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Reviewed-by: Dirk van der Merwe <dirk.vandermerwe@netronome.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfp_net_common.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
index 05e071b3dc5b..104d6c520a52 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
@@ -2253,7 +2253,8 @@ static void nfp_net_rx_ring_free(struct nfp_net_rx_ring *rx_ring)
2253 struct nfp_net_r_vector *r_vec = rx_ring->r_vec; 2253 struct nfp_net_r_vector *r_vec = rx_ring->r_vec;
2254 struct nfp_net_dp *dp = &r_vec->nfp_net->dp; 2254 struct nfp_net_dp *dp = &r_vec->nfp_net->dp;
2255 2255
2256 xdp_rxq_info_unreg(&rx_ring->xdp_rxq); 2256 if (dp->netdev)
2257 xdp_rxq_info_unreg(&rx_ring->xdp_rxq);
2257 kfree(rx_ring->rxbufs); 2258 kfree(rx_ring->rxbufs);
2258 2259
2259 if (rx_ring->rxds) 2260 if (rx_ring->rxds)
@@ -2279,9 +2280,12 @@ nfp_net_rx_ring_alloc(struct nfp_net_dp *dp, struct nfp_net_rx_ring *rx_ring)
2279{ 2280{
2280 int sz, err; 2281 int sz, err;
2281 2282
2282 err = xdp_rxq_info_reg(&rx_ring->xdp_rxq, dp->netdev, rx_ring->idx); 2283 if (dp->netdev) {
2283 if (err < 0) 2284 err = xdp_rxq_info_reg(&rx_ring->xdp_rxq, dp->netdev,
2284 return err; 2285 rx_ring->idx);
2286 if (err < 0)
2287 return err;
2288 }
2285 2289
2286 rx_ring->cnt = dp->rxd_cnt; 2290 rx_ring->cnt = dp->rxd_cnt;
2287 rx_ring->size = sizeof(*rx_ring->rxds) * rx_ring->cnt; 2291 rx_ring->size = sizeof(*rx_ring->rxds) * rx_ring->cnt;