]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/net/ethernet/renesas/sh_eth.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[karo-tx-linux.git] / drivers / net / ethernet / renesas / sh_eth.c
index 474c8a86a2af7ed4ae10bb875666127dabfaccfc..5cd831ebfa83b0a95c472926a0105c521f7c352a 100644 (file)
@@ -1348,7 +1348,7 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
                                                DMA_FROM_DEVICE);
                        skb_put(skb, pkt_len);
                        skb->protocol = eth_type_trans(skb, ndev);
-                       netif_rx(skb);
+                       netif_receive_skb(skb);
                        ndev->stats.rx_packets++;
                        ndev->stats.rx_bytes += pkt_len;
                }
@@ -1906,11 +1906,13 @@ static int sh_eth_open(struct net_device *ndev)
 
        pm_runtime_get_sync(&mdp->pdev->dev);
 
+       napi_enable(&mdp->napi);
+
        ret = request_irq(ndev->irq, sh_eth_interrupt,
                          mdp->cd->irq_flags, ndev->name, ndev);
        if (ret) {
                dev_err(&ndev->dev, "Can not assign IRQ number\n");
-               return ret;
+               goto out_napi_off;
        }
 
        /* Descriptor set */
@@ -1928,12 +1930,12 @@ static int sh_eth_open(struct net_device *ndev)
        if (ret)
                goto out_free_irq;
 
-       napi_enable(&mdp->napi);
-
        return ret;
 
 out_free_irq:
        free_irq(ndev->irq, ndev);
+out_napi_off:
+       napi_disable(&mdp->napi);
        pm_runtime_put_sync(&mdp->pdev->dev);
        return ret;
 }
@@ -2025,8 +2027,6 @@ static int sh_eth_close(struct net_device *ndev)
 {
        struct sh_eth_private *mdp = netdev_priv(ndev);
 
-       napi_disable(&mdp->napi);
-
        netif_stop_queue(ndev);
 
        /* Disable interrupts by clearing the interrupt mask. */
@@ -2044,6 +2044,8 @@ static int sh_eth_close(struct net_device *ndev)
 
        free_irq(ndev->irq, ndev);
 
+       napi_disable(&mdp->napi);
+
        /* Free all the skbuffs in the Rx queue. */
        sh_eth_ring_free(ndev);