diff options
| author | Jakub Kicinski <jakub.kicinski@netronome.com> | 2018-01-10 07:25:54 -0500 |
|---|---|---|
| committer | Daniel Borkmann <daniel@iogearbox.net> | 2018-01-10 07:49:35 -0500 |
| commit | a9c324be72b2243e1cddd3f9e7356849de39ae53 (patch) | |
| tree | 78de961228bbbaed2be5020f29e2f68c5cf5a4a0 | |
| parent | 148989d8bac36a5f9823715c9910adedbe847ae6 (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.c | 12 |
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; |
