Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

[PATCH] e1000: Fix regression: garbled stats and irq allocation during swsusp

e1000: Fix suspend/resume powerup and irq allocation

From: Auke Kok <auke-jan.h.kok@intel.com>

After 7.0.33/2.6.16, e1000 suspend/resume left the user with an enabled
device showing garbled statistics and undetermined irq allocation state,
where `ifconfig eth0 down` would display `trying to free already freed irq`.

Explicitly free and allocate irq as well as powerup the PHY during resume
fixes when needed.

Signed-off-by: Auke Kok <auke-jan.h.kok@intel.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by

Auke Kok and committed by
Jeff Garzik
edd106fc e78181fe

+7
+7
drivers/net/e1000/e1000_main.c
··· 4800 4800 if (adapter->hw.phy_type == e1000_phy_igp_3) 4801 4801 e1000_phy_powerdown_workaround(&adapter->hw); 4802 4802 4803 + if (netif_running(netdev)) 4804 + e1000_free_irq(adapter); 4805 + 4803 4806 /* Release control of h/w to f/w. If f/w is AMT enabled, this 4804 4807 * would have already happened in close and is redundant. */ 4805 4808 e1000_release_hw_control(adapter); ··· 4833 4830 pci_enable_wake(pdev, PCI_D3hot, 0); 4834 4831 pci_enable_wake(pdev, PCI_D3cold, 0); 4835 4832 4833 + if (netif_running(netdev) && (err = e1000_request_irq(adapter))) 4834 + return err; 4835 + 4836 + e1000_power_up_phy(adapter); 4836 4837 e1000_reset(adapter); 4837 4838 E1000_WRITE_REG(&adapter->hw, WUS, ~0); 4838 4839