summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/freescale/gianfar.c
diff options
context:
space:
mode:
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>2014-03-25 17:34:20 (GMT)
committerScott Wood <scottwood@freescale.com>2014-04-10 00:18:56 (GMT)
commit1e30b92814b215db1eb5ef6575b2844b50a00e66 (patch)
treec1fa5abcbbbc91b0bc3b370766d941059cb0101e /drivers/net/ethernet/freescale/gianfar.c
parentf1925bb8cdcc338b34714f4da94a9c2a7034d109 (diff)
downloadlinux-fsl-qoriq-1e30b92814b215db1eb5ef6575b2844b50a00e66.tar.xz
net: gianfar: do not disable interrupts
each per-queue lock is taken with spin_lock_irqsave() except in the case where all of them are taken for some kind of serialisation. As an optimisation local_irq_save() is used so that lock_tx_qs() and lock_rx_qs() can use just the spin_lock() variant instead. On RT local_irq_save() behaves differently so we use the nort() variant. Lockdep screems easily by "ethtool -K eth0 rx off tx off" What remains is missing lockdep annotation that makes lockdep think lock_tx_qs() may cause a dead lock. Cc: stable-rt@vger.kernel.org Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Diffstat (limited to 'drivers/net/ethernet/freescale/gianfar.c')
-rw-r--r--drivers/net/ethernet/freescale/gianfar.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index de10ff3..8f1afda 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -1301,7 +1301,7 @@ static int gfar_suspend(struct device *dev)
if (netif_running(ndev)) {
- local_irq_save(flags);
+ local_irq_save_nort(flags);
lock_tx_qs(priv);
lock_rx_qs(priv);
@@ -1319,7 +1319,7 @@ static int gfar_suspend(struct device *dev)
unlock_rx_qs(priv);
unlock_tx_qs(priv);
- local_irq_restore(flags);
+ local_irq_restore_nort(flags);
disable_napi(priv);
@@ -1361,7 +1361,7 @@ static int gfar_resume(struct device *dev)
/* Disable Magic Packet mode, in case something
* else woke us up.
*/
- local_irq_save(flags);
+ local_irq_save_nort(flags);
lock_tx_qs(priv);
lock_rx_qs(priv);
@@ -1373,7 +1373,7 @@ static int gfar_resume(struct device *dev)
unlock_rx_qs(priv);
unlock_tx_qs(priv);
- local_irq_restore(flags);
+ local_irq_restore_nort(flags);
netif_device_attach(ndev);
@@ -2387,7 +2387,7 @@ void gfar_vlan_mode(struct net_device *dev, netdev_features_t features)
u32 tempval;
regs = priv->gfargrp[0].regs;
- local_irq_save(flags);
+ local_irq_save_nort(flags);
lock_rx_qs(priv);
if (features & NETIF_F_HW_VLAN_CTAG_TX) {
@@ -2420,7 +2420,7 @@ void gfar_vlan_mode(struct net_device *dev, netdev_features_t features)
gfar_change_mtu(dev, dev->mtu);
unlock_rx_qs(priv);
- local_irq_restore(flags);
+ local_irq_restore_nort(flags);
}
static int gfar_change_mtu(struct net_device *dev, int new_mtu)
@@ -3381,14 +3381,14 @@ static irqreturn_t gfar_error(int irq, void *grp_id)
dev->stats.tx_dropped++;
atomic64_inc(&priv->extra_stats.tx_underrun);
- local_irq_save(flags);
+ local_irq_save_nort(flags);
lock_tx_qs(priv);
/* Reactivate the Tx Queues */
gfar_write(&regs->tstat, gfargrp->tstat);
unlock_tx_qs(priv);
- local_irq_restore(flags);
+ local_irq_restore_nort(flags);
}
netif_dbg(priv, tx_err, dev, "Transmit Error\n");
}