| From c98235cb8584a72e95786e17d695a8e5fafcd766 Mon Sep 17 00:00:00 2001 |
| From: Chris Mason <clm@fb.com> |
| Date: Tue, 15 Apr 2014 18:09:24 -0400 |
| Subject: mlx4_en: don't use napi_synchronize inside mlx4_en_netpoll |
| |
| From: Chris Mason <clm@fb.com> |
| |
| commit c98235cb8584a72e95786e17d695a8e5fafcd766 upstream. |
| |
| The mlx4 driver is triggering schedules while atomic inside |
| mlx4_en_netpoll: |
| |
| spin_lock_irqsave(&cq->lock, flags); |
| napi_synchronize(&cq->napi); |
| ^^^^^ msleep here |
| mlx4_en_process_rx_cq(dev, cq, 0); |
| spin_unlock_irqrestore(&cq->lock, flags); |
| |
| This was part of a patch by Alexander Guller from Mellanox in 2011, |
| but it still isn't upstream. |
| |
| Signed-off-by: Chris Mason <clm@fb.com> |
| Acked-By: Amir Vadai <amirv@mellanox.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/net/ethernet/mellanox/mlx4/en_cq.c | 1 - |
| drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 6 +----- |
| drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 1 - |
| 3 files changed, 1 insertion(+), 7 deletions(-) |
| |
| --- a/drivers/net/ethernet/mellanox/mlx4/en_cq.c |
| +++ b/drivers/net/ethernet/mellanox/mlx4/en_cq.c |
| @@ -66,7 +66,6 @@ int mlx4_en_create_cq(struct mlx4_en_pri |
| |
| cq->ring = ring; |
| cq->is_tx = mode; |
| - spin_lock_init(&cq->lock); |
| |
| /* Allocate HW buffers on provided NUMA node. |
| * dev->numa_node is used in mtt range allocation flow. |
| --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c |
| +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c |
| @@ -1315,15 +1315,11 @@ static void mlx4_en_netpoll(struct net_d |
| { |
| struct mlx4_en_priv *priv = netdev_priv(dev); |
| struct mlx4_en_cq *cq; |
| - unsigned long flags; |
| int i; |
| |
| for (i = 0; i < priv->rx_ring_num; i++) { |
| cq = priv->rx_cq[i]; |
| - spin_lock_irqsave(&cq->lock, flags); |
| - napi_synchronize(&cq->napi); |
| - mlx4_en_process_rx_cq(dev, cq, 0); |
| - spin_unlock_irqrestore(&cq->lock, flags); |
| + napi_schedule(&cq->napi); |
| } |
| } |
| #endif |
| --- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h |
| +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h |
| @@ -309,7 +309,6 @@ struct mlx4_en_cq { |
| struct mlx4_cq mcq; |
| struct mlx4_hwq_resources wqres; |
| int ring; |
| - spinlock_t lock; |
| struct net_device *dev; |
| struct napi_struct napi; |
| int size; |