Message ID | 20201008184526.3196768-1-jonathan.lemon@gmail.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | [net-next] mlx4: handle non-napi callers to napi_poll | expand |
On Thu, 8 Oct 2020 11:45:26 -0700 Jonathan Lemon wrote: > From: Jonathan Lemon <bsd@fb.com> > > netcons calls napi_poll with a budget of 0 to transmit packets. > Handle this by: > - skipping RX processing > - do not try to recycle TX packets to the RX cache > > Signed-off-by: Jonathan Lemon <jonathan.lemon@gmail.com> Tariq, Saeed - how does this look to you?
On Mon, 12 Oct 2020 at 05:47, Jakub Kicinski <kuba@kernel.org> wrote: > > On Thu, 8 Oct 2020 11:45:26 -0700 Jonathan Lemon wrote: > > From: Jonathan Lemon <bsd@fb.com> > > > > netcons calls napi_poll with a budget of 0 to transmit packets. > > Handle this by: > > - skipping RX processing > > - do not try to recycle TX packets to the RX cache > > > > Signed-off-by: Jonathan Lemon <jonathan.lemon@gmail.com> > > Tariq, Saeed - how does this look to you? Reviewed-by: Tariq Toukan <tariqt@nvidia.com> Thanks, Tariq
On Mon, 12 Oct 2020 09:40:51 +0300 Tariq Toukan wrote: > On Mon, 12 Oct 2020 at 05:47, Jakub Kicinski <kuba@kernel.org> wrote: > > > > On Thu, 8 Oct 2020 11:45:26 -0700 Jonathan Lemon wrote: > > > From: Jonathan Lemon <bsd@fb.com> > > > > > > netcons calls napi_poll with a budget of 0 to transmit packets. > > > Handle this by: > > > - skipping RX processing > > > - do not try to recycle TX packets to the RX cache > > > > > > Signed-off-by: Jonathan Lemon <jonathan.lemon@gmail.com> > > > > Tariq, Saeed - how does this look to you? > > Reviewed-by: Tariq Toukan <tariqt@nvidia.com> Applied, thanks!
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c index 99d7737e8ad6..502d1b97855c 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c @@ -943,6 +943,9 @@ int mlx4_en_poll_rx_cq(struct napi_struct *napi, int budget) bool clean_complete = true; int done; + if (!budget) + return 0; + if (priv->tx_ring_num[TX_XDP]) { xdp_tx_cq = priv->tx_cq[TX_XDP][cq->ring]; if (xdp_tx_cq->xdp_busy) { diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c index 45869b29368f..3ddb7268e415 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c @@ -350,7 +350,7 @@ u32 mlx4_en_recycle_tx_desc(struct mlx4_en_priv *priv, .dma = tx_info->map0_dma, }; - if (!mlx4_en_rx_recycle(ring->recycle_ring, &frame)) { + if (!napi_mode || !mlx4_en_rx_recycle(ring->recycle_ring, &frame)) { dma_unmap_page(priv->ddev, tx_info->map0_dma, PAGE_SIZE, priv->dma_dir); put_page(tx_info->page);