diff options
author | Yevgeny Petrilin <yevgenyp@mellanox.co.il> | 2009-06-01 19:22:18 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-06-02 05:29:05 -0400 |
commit | 3c2fa83f9c2bbb3e91992a2fc443b7104a07e0bc (patch) | |
tree | 4d64a8a2bd7403e841af3a650173236121c13dd6 | |
parent | 9e47edaa1ae2efad7db0c8c7fb53e4431bb35364 (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.c | 19 |
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 | |||
259 | err_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 | |||
273 | err_mr: | 256 | err_mr: |
274 | mlx4_mr_free(dev, &mdev->mr); | 257 | mlx4_mr_free(dev, &mdev->mr); |
275 | err_uar: | 258 | err_uar: |