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 */
        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;
 }
 {
        struct sh_eth_private *mdp = netdev_priv(ndev);
 
-       napi_disable(&mdp->napi);
-
        netif_stop_queue(ndev);
 
        /* Disable interrupts by clearing the interrupt mask. */
 
        free_irq(ndev->irq, ndev);
 
+       napi_disable(&mdp->napi);
+
        /* Free all the skbuffs in the Rx queue. */
        sh_eth_ring_free(ndev);