diff options
author | Chris Mason <clm@fb.com> | 2014-04-15 18:09:24 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-04-16 15:02:42 -0400 |
commit | c98235cb8584a72e95786e17d695a8e5fafcd766 (patch) | |
tree | 825f91b1a94cc33496d94d00ac20b03e2c1af2e9 /drivers/net/ethernet/mellanox/mlx4/en_netdev.c | |
parent | b07afe07b10f24c4fd962330be3618ef965a4781 (diff) |
mlx4_en: don't use napi_synchronize inside mlx4_en_netpoll
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>
cc: stable@vger.kernel.org
Acked-By: Amir Vadai <amirv@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/en_netdev.c')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c index f085c2df5e69..7e4b1720c3d1 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c | |||
@@ -1304,15 +1304,11 @@ static void mlx4_en_netpoll(struct net_device *dev) | |||
1304 | { | 1304 | { |
1305 | struct mlx4_en_priv *priv = netdev_priv(dev); | 1305 | struct mlx4_en_priv *priv = netdev_priv(dev); |
1306 | struct mlx4_en_cq *cq; | 1306 | struct mlx4_en_cq *cq; |
1307 | unsigned long flags; | ||
1308 | int i; | 1307 | int i; |
1309 | 1308 | ||
1310 | for (i = 0; i < priv->rx_ring_num; i++) { | 1309 | for (i = 0; i < priv->rx_ring_num; i++) { |
1311 | cq = priv->rx_cq[i]; | 1310 | cq = priv->rx_cq[i]; |
1312 | spin_lock_irqsave(&cq->lock, flags); | 1311 | napi_schedule(&cq->napi); |
1313 | napi_synchronize(&cq->napi); | ||
1314 | mlx4_en_process_rx_cq(dev, cq, 0); | ||
1315 | spin_unlock_irqrestore(&cq->lock, flags); | ||
1316 | } | 1312 | } |
1317 | } | 1313 | } |
1318 | #endif | 1314 | #endif |