Skip to content

Commit

Permalink
e100: Do suspend/shutdown like e1000
Browse files Browse the repository at this point in the history
This fixes a "trying to free already free IRQ" message and simplifies
the shutdown/suspend code by re-using already existing code when going
to suspend. The code is now symmetric with e100_resume.

Signed-off-by: Auke Kok <auke-jan.h.kok@intel.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
  • Loading branch information
Auke Kok authored and Jeff Garzik committed Mar 5, 2008
1 parent af856bb commit f902283
Showing 1 changed file with 3 additions and 26 deletions.
29 changes: 3 additions & 26 deletions drivers/net/e100.c
Original file line number Diff line number Diff line change
Expand Up @@ -2782,16 +2782,13 @@ static void __devexit e100_remove(struct pci_dev *pdev)
}
}

#ifdef CONFIG_PM
static int e100_suspend(struct pci_dev *pdev, pm_message_t state)
{
struct net_device *netdev = pci_get_drvdata(pdev);
struct nic *nic = netdev_priv(netdev);

if (netif_running(netdev))
napi_disable(&nic->napi);
del_timer_sync(&nic->watchdog);
netif_carrier_off(nic->netdev);
e100_down(nic);
netif_device_detach(netdev);

pci_save_state(pdev);
Expand All @@ -2804,14 +2801,13 @@ static int e100_suspend(struct pci_dev *pdev, pm_message_t state)
pci_enable_wake(pdev, PCI_D3cold, 0);
}

free_irq(pdev->irq, netdev);

pci_disable_device(pdev);
pci_set_power_state(pdev, PCI_D3hot);

return 0;
}

#ifdef CONFIG_PM
static int e100_resume(struct pci_dev *pdev)
{
struct net_device *netdev = pci_get_drvdata(pdev);
Expand All @@ -2832,26 +2828,7 @@ static int e100_resume(struct pci_dev *pdev)

static void e100_shutdown(struct pci_dev *pdev)
{
struct net_device *netdev = pci_get_drvdata(pdev);
struct nic *nic = netdev_priv(netdev);

if (netif_running(netdev))
napi_disable(&nic->napi);
del_timer_sync(&nic->watchdog);
netif_carrier_off(nic->netdev);

if ((nic->flags & wol_magic) | e100_asf(nic)) {
pci_enable_wake(pdev, PCI_D3hot, 1);
pci_enable_wake(pdev, PCI_D3cold, 1);
} else {
pci_enable_wake(pdev, PCI_D3hot, 0);
pci_enable_wake(pdev, PCI_D3cold, 0);
}

free_irq(pdev->irq, netdev);

pci_disable_device(pdev);
pci_set_power_state(pdev, PCI_D3hot);
e100_suspend(pdev, PMSG_SUSPEND);
}

/* ------------------ PCI Error Recovery infrastructure -------------- */
Expand Down

0 comments on commit f902283

Please sign in to comment.