|
@@ -1622,10 +1622,18 @@ static int gfar_clean_tx_ring(struct net_device *dev)
|
|
static void gfar_schedule_cleanup(struct net_device *dev)
|
|
static void gfar_schedule_cleanup(struct net_device *dev)
|
|
{
|
|
{
|
|
struct gfar_private *priv = netdev_priv(dev);
|
|
struct gfar_private *priv = netdev_priv(dev);
|
|
|
|
+ unsigned long flags;
|
|
|
|
+
|
|
|
|
+ spin_lock_irqsave(&priv->txlock, flags);
|
|
|
|
+ spin_lock(&priv->rxlock);
|
|
|
|
+
|
|
if (netif_rx_schedule_prep(&priv->napi)) {
|
|
if (netif_rx_schedule_prep(&priv->napi)) {
|
|
gfar_write(&priv->regs->imask, IMASK_RTX_DISABLED);
|
|
gfar_write(&priv->regs->imask, IMASK_RTX_DISABLED);
|
|
__netif_rx_schedule(&priv->napi);
|
|
__netif_rx_schedule(&priv->napi);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ spin_unlock(&priv->rxlock);
|
|
|
|
+ spin_unlock_irqrestore(&priv->txlock, flags);
|
|
}
|
|
}
|
|
|
|
|
|
/* Interrupt Handler for Transmit complete */
|
|
/* Interrupt Handler for Transmit complete */
|