
From: "Adrian Yee" <brewt-linux-kernel@brewt.org>

Having an 8139 based device in my notebook, I often switch between it and
wireless.  The problem is that the 8139too driver does not save/restore the
pci configuration of the card if the device isn't running.  This simple
patch moves the save/restore code so that the code runs regardless of
whether or not the device is running.

I looked at other drivers and they all seem to do the same thing.  Is there
a reason why this isn't done like in the patch?


---

 25-akpm/drivers/net/8139too.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff -puN drivers/net/8139too.c~8139too-suspend-fix drivers/net/8139too.c
--- 25/drivers/net/8139too.c~8139too-suspend-fix	2004-04-25 23:35:44.746123616 -0700
+++ 25-akpm/drivers/net/8139too.c	2004-04-25 23:35:44.751122856 -0700
@@ -2554,6 +2554,9 @@ static int rtl8139_suspend (struct pci_d
 	void *ioaddr = tp->mmio_addr;
 	unsigned long flags;
 
+	pci_set_power_state (pdev, 3);
+	pci_save_state (pdev, tp->pci_state);
+
 	if (!netif_running (dev))
 		return 0;
 
@@ -2571,9 +2574,6 @@ static int rtl8139_suspend (struct pci_d
 
 	spin_unlock_irqrestore (&tp->lock, flags);
 
-	pci_set_power_state (pdev, 3);
-	pci_save_state (pdev, tp->pci_state);
-
 	return 0;
 }
 
@@ -2583,10 +2583,10 @@ static int rtl8139_resume (struct pci_de
 	struct net_device *dev = pci_get_drvdata (pdev);
 	struct rtl8139_private *tp = dev->priv;
 
-	if (!netif_running (dev))
-		return 0;
 	pci_restore_state (pdev, tp->pci_state);
 	pci_set_power_state (pdev, 0);
+	if (!netif_running (dev))
+		return 0;
 	rtl8139_init_ring (dev);
 	rtl8139_hw_start (dev);
 	netif_device_attach (dev);

_
