aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYevgeny Petrilin <yevgenyp@mellanox.co.il>2009-06-01 19:22:18 -0400
committerDavid S. Miller <davem@davemloft.net>2009-06-02 05:29:05 -0400
commit3c2fa83f9c2bbb3e91992a2fc443b7104a07e0bc (patch)
tree4d64a8a2bd7403e841af3a650173236121c13dd6
parent9e47edaa1ae2efad7db0c8c7fb53e4431bb35364 (diff)
mlx4_en: Work with part of the ports.
If the initialization of one of the ports failed, there is no need to fail the other one as well. Signed-off-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/mlx4/en_main.c19
1 files changed, 1 insertions, 18 deletions
diff --git a/drivers/net/mlx4/en_main.c b/drivers/net/mlx4/en_main.c
index 23955d8891b..b510000d839 100644
--- a/drivers/net/mlx4/en_main.c
+++ b/drivers/net/mlx4/en_main.c
@@ -248,28 +248,11 @@ static void *mlx4_en_add(struct mlx4_dev *dev)
248 /* Create a netdev for each port */ 248 /* Create a netdev for each port */
249 mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_ETH) { 249 mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_ETH) {
250 mlx4_info(mdev, "Activating port:%d\n", i); 250 mlx4_info(mdev, "Activating port:%d\n", i);
251 if (mlx4_en_init_netdev(mdev, i, &mdev->profile.prof[i])) { 251 if (mlx4_en_init_netdev(mdev, i, &mdev->profile.prof[i]))
252 mdev->pndev[i] = NULL; 252 mdev->pndev[i] = NULL;
253 goto err_free_netdev;
254 }
255 } 253 }
256 return mdev; 254 return mdev;
257 255
258
259err_free_netdev:
260 mlx4_foreach_port(i, dev, MLX4_PORT_TYPE_ETH) {
261 if (mdev->pndev[i])
262 mlx4_en_destroy_netdev(mdev->pndev[i]);
263 }
264
265 mutex_lock(&mdev->state_lock);
266 mdev->device_up = false;
267 mutex_unlock(&mdev->state_lock);
268 flush_workqueue(mdev->workqueue);
269
270 /* Stop event queue before we drop down to release shared SW state */
271 destroy_workqueue(mdev->workqueue);
272
273err_mr: 256err_mr:
274 mlx4_mr_free(dev, &mdev->mr); 257 mlx4_mr_free(dev, &mdev->mr);
275err_uar: 258err_uar: