[sky2] Fix sky2 network driver suspend/resume
authorLinus Torvalds <torvalds@g5.osdl.org>
Mon, 12 Jun 2006 19:53:27 +0000 (12:53 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Mon, 12 Jun 2006 19:53:27 +0000 (12:53 -0700)
This fixes two independent problems: it would not save the PCI state on
suspend (and thus try to resume a nonexistent state on resume), and
while shut off, if an interrupt happened on the same shared irq, the irq
handler would react very badly to the interrupt status being an invalid
all-ones state.

Acked-by: Jeff Garzik <jgarzik@pobox.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/net/sky2.c

index 959109609d852bb47c2c0fd5f3ed04c693486c88..6b87c7a5c90660feb1c816387a8da8355c75699d 100644 (file)
@@ -2183,6 +2183,9 @@ static int sky2_poll(struct net_device *dev0, int *budget)
        int work_done = 0;
        u32 status = sky2_read32(hw, B0_Y2_SP_EISR);
 
+       if (!~status)
+               return 0;
+
        if (status & Y2_IS_HW_ERR)
                sky2_hw_intr(hw);
 
@@ -3438,6 +3441,7 @@ static int sky2_suspend(struct pci_dev *pdev, pm_message_t state)
                }
        }
 
+       pci_save_state(pdev);
        return sky2_set_power_state(hw, pci_choose_state(pdev, state));
 }