diff options
-rw-r--r-- | net/dsa/dsa.c | 10 | ||||
-rw-r--r-- | net/dsa/dsa_priv.h | 5 | ||||
-rw-r--r-- | net/dsa/slave.c | 15 |
3 files changed, 13 insertions, 17 deletions
diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c index 2173402d87e0..fc1813140be6 100644 --- a/net/dsa/dsa.c +++ b/net/dsa/dsa.c | |||
@@ -314,19 +314,15 @@ dsa_switch_setup(struct dsa_switch_tree *dst, int index, | |||
314 | * Create network devices for physical switch ports. | 314 | * Create network devices for physical switch ports. |
315 | */ | 315 | */ |
316 | for (i = 0; i < DSA_MAX_PORTS; i++) { | 316 | for (i = 0; i < DSA_MAX_PORTS; i++) { |
317 | struct net_device *slave_dev; | ||
318 | |||
319 | if (!(ds->phys_port_mask & (1 << i))) | 317 | if (!(ds->phys_port_mask & (1 << i))) |
320 | continue; | 318 | continue; |
321 | 319 | ||
322 | slave_dev = dsa_slave_create(ds, parent, i, pd->port_names[i]); | 320 | ret = dsa_slave_create(ds, parent, i, pd->port_names[i]); |
323 | if (slave_dev == NULL) { | 321 | if (ret < 0) { |
324 | netdev_err(dst->master_netdev, "[%d]: can't create dsa slave device for port %d(%s)\n", | 322 | netdev_err(dst->master_netdev, "[%d]: can't create dsa slave device for port %d(%s)\n", |
325 | index, i, pd->port_names[i]); | 323 | index, i, pd->port_names[i]); |
326 | continue; | 324 | ret = 0; |
327 | } | 325 | } |
328 | |||
329 | ds->ports[i] = slave_dev; | ||
330 | } | 326 | } |
331 | 327 | ||
332 | #ifdef CONFIG_NET_DSA_HWMON | 328 | #ifdef CONFIG_NET_DSA_HWMON |
diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h index dc9756d3154c..7eb1a6acd46c 100644 --- a/net/dsa/dsa_priv.h +++ b/net/dsa/dsa_priv.h | |||
@@ -53,9 +53,8 @@ extern char dsa_driver_version[]; | |||
53 | /* slave.c */ | 53 | /* slave.c */ |
54 | extern const struct dsa_device_ops notag_netdev_ops; | 54 | extern const struct dsa_device_ops notag_netdev_ops; |
55 | void dsa_slave_mii_bus_init(struct dsa_switch *ds); | 55 | void dsa_slave_mii_bus_init(struct dsa_switch *ds); |
56 | struct net_device *dsa_slave_create(struct dsa_switch *ds, | 56 | int dsa_slave_create(struct dsa_switch *ds, struct device *parent, |
57 | struct device *parent, | 57 | int port, char *name); |
58 | int port, char *name); | ||
59 | int dsa_slave_suspend(struct net_device *slave_dev); | 58 | int dsa_slave_suspend(struct net_device *slave_dev); |
60 | int dsa_slave_resume(struct net_device *slave_dev); | 59 | int dsa_slave_resume(struct net_device *slave_dev); |
61 | 60 | ||
diff --git a/net/dsa/slave.c b/net/dsa/slave.c index f23deadf42a0..5be4c928c9c9 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c | |||
@@ -605,9 +605,8 @@ int dsa_slave_resume(struct net_device *slave_dev) | |||
605 | return 0; | 605 | return 0; |
606 | } | 606 | } |
607 | 607 | ||
608 | struct net_device * | 608 | int dsa_slave_create(struct dsa_switch *ds, struct device *parent, |
609 | dsa_slave_create(struct dsa_switch *ds, struct device *parent, | 609 | int port, char *name) |
610 | int port, char *name) | ||
611 | { | 610 | { |
612 | struct net_device *master = ds->dst->master_netdev; | 611 | struct net_device *master = ds->dst->master_netdev; |
613 | struct net_device *slave_dev; | 612 | struct net_device *slave_dev; |
@@ -617,7 +616,7 @@ dsa_slave_create(struct dsa_switch *ds, struct device *parent, | |||
617 | slave_dev = alloc_netdev(sizeof(struct dsa_slave_priv), name, | 616 | slave_dev = alloc_netdev(sizeof(struct dsa_slave_priv), name, |
618 | NET_NAME_UNKNOWN, ether_setup); | 617 | NET_NAME_UNKNOWN, ether_setup); |
619 | if (slave_dev == NULL) | 618 | if (slave_dev == NULL) |
620 | return slave_dev; | 619 | return -ENOMEM; |
621 | 620 | ||
622 | slave_dev->features = master->vlan_features; | 621 | slave_dev->features = master->vlan_features; |
623 | slave_dev->ethtool_ops = &dsa_slave_ethtool_ops; | 622 | slave_dev->ethtool_ops = &dsa_slave_ethtool_ops; |
@@ -667,19 +666,21 @@ dsa_slave_create(struct dsa_switch *ds, struct device *parent, | |||
667 | ret = dsa_slave_phy_setup(p, slave_dev); | 666 | ret = dsa_slave_phy_setup(p, slave_dev); |
668 | if (ret) { | 667 | if (ret) { |
669 | free_netdev(slave_dev); | 668 | free_netdev(slave_dev); |
670 | return NULL; | 669 | return ret; |
671 | } | 670 | } |
672 | 671 | ||
672 | ds->ports[port] = slave_dev; | ||
673 | ret = register_netdev(slave_dev); | 673 | ret = register_netdev(slave_dev); |
674 | if (ret) { | 674 | if (ret) { |
675 | netdev_err(master, "error %d registering interface %s\n", | 675 | netdev_err(master, "error %d registering interface %s\n", |
676 | ret, slave_dev->name); | 676 | ret, slave_dev->name); |
677 | phy_disconnect(p->phy); | 677 | phy_disconnect(p->phy); |
678 | ds->ports[port] = NULL; | ||
678 | free_netdev(slave_dev); | 679 | free_netdev(slave_dev); |
679 | return NULL; | 680 | return ret; |
680 | } | 681 | } |
681 | 682 | ||
682 | netif_carrier_off(slave_dev); | 683 | netif_carrier_off(slave_dev); |
683 | 684 | ||
684 | return slave_dev; | 685 | return 0; |
685 | } | 686 | } |