aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@osdl.org>2006-06-16 15:10:46 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-17 13:52:12 -0400
commit88d113601ca19c82feb038438c8c5db502d146f9 (patch)
tree504672622efd84acdd0fbdaef0c5b27e8f2f9e8d
parent991721572ef2140c6411894aebefd3377e71a9e7 (diff)
[PATCH] sky2: netconsole suspend/resume interaction
A couple of fixes that should prevent crashes when using netconsole and suspend/resume. First, netconsole poll routine shouldn't run unless the device is up; second, the NAPI poll should be disabled during suspend. This is only an issue on sky2, because it has to have one NAPI poll routine for both ports on dual port boards. Normal drivers use netif_rx_schedule_prep and that checks for netif_running. Signed-off-by: Stephen Hemminger <shemminger@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--drivers/net/sky2.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index 97fe95666f3b..fba1e4d4d83d 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -2255,8 +2255,10 @@ static irqreturn_t sky2_intr(int irq, void *dev_id, struct pt_regs *regs)
2255static void sky2_netpoll(struct net_device *dev) 2255static void sky2_netpoll(struct net_device *dev)
2256{ 2256{
2257 struct sky2_port *sky2 = netdev_priv(dev); 2257 struct sky2_port *sky2 = netdev_priv(dev);
2258 struct net_device *dev0 = sky2->hw->dev[0];
2258 2259
2259 sky2_intr(sky2->hw->pdev->irq, sky2->hw, NULL); 2260 if (netif_running(dev) && __netif_rx_schedule_prep(dev0))
2261 __netif_rx_schedule(dev0);
2260} 2262}
2261#endif 2263#endif
2262 2264
@@ -3446,6 +3448,7 @@ static int sky2_suspend(struct pci_dev *pdev, pm_message_t state)
3446 3448
3447 sky2_down(dev); 3449 sky2_down(dev);
3448 netif_device_detach(dev); 3450 netif_device_detach(dev);
3451 netif_poll_disable(dev);
3449 } 3452 }
3450 } 3453 }
3451 3454
@@ -3474,6 +3477,8 @@ static int sky2_resume(struct pci_dev *pdev)
3474 struct net_device *dev = hw->dev[i]; 3477 struct net_device *dev = hw->dev[i];
3475 if (dev && netif_running(dev)) { 3478 if (dev && netif_running(dev)) {
3476 netif_device_attach(dev); 3479 netif_device_attach(dev);
3480 netif_poll_enable(dev);
3481
3477 err = sky2_up(dev); 3482 err = sky2_up(dev);
3478 if (err) { 3483 if (err) {
3479 printk(KERN_ERR PFX "%s: could not up: %d\n", 3484 printk(KERN_ERR PFX "%s: could not up: %d\n",