Commit d374c1c1 authored by Linus Torvalds's avatar Linus Torvalds

[sky2] Fix sky2 network driver suspend/resume

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: default avatarJeff Garzik <jgarzik@pobox.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 0e838b72
...@@ -2183,6 +2183,9 @@ static int sky2_poll(struct net_device *dev0, int *budget) ...@@ -2183,6 +2183,9 @@ static int sky2_poll(struct net_device *dev0, int *budget)
int work_done = 0; int work_done = 0;
u32 status = sky2_read32(hw, B0_Y2_SP_EISR); u32 status = sky2_read32(hw, B0_Y2_SP_EISR);
if (!~status)
return 0;
if (status & Y2_IS_HW_ERR) if (status & Y2_IS_HW_ERR)
sky2_hw_intr(hw); sky2_hw_intr(hw);
...@@ -3438,6 +3441,7 @@ static int sky2_suspend(struct pci_dev *pdev, pm_message_t state) ...@@ -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)); return sky2_set_power_state(hw, pci_choose_state(pdev, state));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment