Skip to content

Commit

Permalink
r8169: do not bring device down when suspending
Browse files Browse the repository at this point in the history
Stopping all activity through ChipCmd and blindly acking the irqs
is neither nice nor completely needed: the transition to low-power
mode does enough work and it apparently keeps the device in a sane
state.

Patch suggested by a fix for http://bugzilla.kernel.org/show_bug.cgi?id=9512

The rtl_shutdown path is kept unchanged so far.

Signed-off-by: Francois Romieu <[email protected]>
Tested-by: Anders Eriksson <[email protected]>
Cc: Edward Hsu <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
françois romieu authored and davem330 committed Jun 18, 2009
1 parent c2f3f3a commit 4bb3f52
Showing 1 changed file with 8 additions and 11 deletions.
19 changes: 8 additions & 11 deletions drivers/net/r8169.c
Original file line number Diff line number Diff line change
Expand Up @@ -3811,22 +3811,11 @@ static struct net_device_stats *rtl8169_get_stats(struct net_device *dev)

static void rtl8169_net_suspend(struct net_device *dev)
{
struct rtl8169_private *tp = netdev_priv(dev);
void __iomem *ioaddr = tp->mmio_addr;

if (!netif_running(dev))
return;

netif_device_detach(dev);
netif_stop_queue(dev);

spin_lock_irq(&tp->lock);

rtl8169_asic_down(ioaddr);

rtl8169_rx_missed(dev, ioaddr);

spin_unlock_irq(&tp->lock);
}

#ifdef CONFIG_PM
Expand Down Expand Up @@ -3876,9 +3865,17 @@ static struct dev_pm_ops rtl8169_pm_ops = {
static void rtl_shutdown(struct pci_dev *pdev)
{
struct net_device *dev = pci_get_drvdata(pdev);
struct rtl8169_private *tp = netdev_priv(dev);
void __iomem *ioaddr = tp->mmio_addr;

rtl8169_net_suspend(dev);

spin_lock_irq(&tp->lock);

rtl8169_asic_down(ioaddr);

spin_unlock_irq(&tp->lock);

if (system_state == SYSTEM_POWER_OFF) {
pci_wake_from_d3(pdev, true);
pci_set_power_state(pdev, PCI_D3hot);
Expand Down

0 comments on commit 4bb3f52

Please sign in to comment.