aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorMike McCormack <mikem@ring3k.org>2009-09-22 23:50:36 -0400
committerDavid S. Miller <davem@davemloft.net>2009-09-30 23:03:18 -0400
commitf1914226e12044f0cacda59efc91bee972c30341 (patch)
tree8cacad205caa6d14829f196bfad3f46e72eac858 /drivers/net
parentec1652af18ef02c7c6ceeabb64f56f16eaf40ae9 (diff)
skge: Make sure both ports initialize correctly
If allocation of the second ports fails, make sure that hw->ports is not 2 otherwise we'll crash trying to access the second port. This fix is copied from a similar fix in the sky2 driver (ca519274...), but is untested, as I don't have a skge card. Signed-off-by: Mike McCormack <mikem@ring3k.org> Acked-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/skge.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/net/skge.c b/drivers/net/skge.c
index 55bad4081966..2bb21ffbde3a 100644
--- a/drivers/net/skge.c
+++ b/drivers/net/skge.c
@@ -3982,14 +3982,17 @@ static int __devinit skge_probe(struct pci_dev *pdev,
3982 } 3982 }
3983 skge_show_addr(dev); 3983 skge_show_addr(dev);
3984 3984
3985 if (hw->ports > 1 && (dev1 = skge_devinit(hw, 1, using_dac))) { 3985 if (hw->ports > 1) {
3986 if (register_netdev(dev1) == 0) 3986 dev1 = skge_devinit(hw, 1, using_dac);
3987 if (dev1 && register_netdev(dev1) == 0)
3987 skge_show_addr(dev1); 3988 skge_show_addr(dev1);
3988 else { 3989 else {
3989 /* Failure to register second port need not be fatal */ 3990 /* Failure to register second port need not be fatal */
3990 dev_warn(&pdev->dev, "register of second port failed\n"); 3991 dev_warn(&pdev->dev, "register of second port failed\n");
3991 hw->dev[1] = NULL; 3992 hw->dev[1] = NULL;
3992 free_netdev(dev1); 3993 hw->ports = 1;
3994 if (dev1)
3995 free_netdev(dev1);
3993 } 3996 }
3994 } 3997 }
3995 pci_set_drvdata(pdev, hw); 3998 pci_set_drvdata(pdev, hw);