diff options
author | Yitchak Gertner <gertner@broadcom.com> | 2008-08-25 18:25:45 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-08-25 18:25:45 -0400 |
commit | d101463499b769d04e37d3bcb0e0c6876780ce08 (patch) | |
tree | f585c16f7fa0f12d4987e81e4b935b9a29912059 /drivers | |
parent | 3cdf1db7db1649771d683b6ba323ff604ea3cc5e (diff) |
bnx2x: NIC load failure cleanup
Load failures were not handled correctly
Signed-off-by: Yitchak Gertner <gertner@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/bnx2x_main.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/drivers/net/bnx2x_main.c b/drivers/net/bnx2x_main.c index 398daeb5be90..1c81da45f691 100644 --- a/drivers/net/bnx2x_main.c +++ b/drivers/net/bnx2x_main.c | |||
@@ -6341,7 +6341,7 @@ static int bnx2x_nic_load(struct bnx2x *bp, int load_mode) | |||
6341 | rc = bnx2x_init_hw(bp, load_code); | 6341 | rc = bnx2x_init_hw(bp, load_code); |
6342 | if (rc) { | 6342 | if (rc) { |
6343 | BNX2X_ERR("HW init failed, aborting\n"); | 6343 | BNX2X_ERR("HW init failed, aborting\n"); |
6344 | goto load_error; | 6344 | goto load_int_disable; |
6345 | } | 6345 | } |
6346 | 6346 | ||
6347 | /* Setup NIC internals and enable interrupts */ | 6347 | /* Setup NIC internals and enable interrupts */ |
@@ -6353,7 +6353,7 @@ static int bnx2x_nic_load(struct bnx2x *bp, int load_mode) | |||
6353 | if (!load_code) { | 6353 | if (!load_code) { |
6354 | BNX2X_ERR("MCP response failure, aborting\n"); | 6354 | BNX2X_ERR("MCP response failure, aborting\n"); |
6355 | rc = -EBUSY; | 6355 | rc = -EBUSY; |
6356 | goto load_int_disable; | 6356 | goto load_rings_free; |
6357 | } | 6357 | } |
6358 | } | 6358 | } |
6359 | 6359 | ||
@@ -6372,7 +6372,7 @@ static int bnx2x_nic_load(struct bnx2x *bp, int load_mode) | |||
6372 | rc = bnx2x_setup_leading(bp); | 6372 | rc = bnx2x_setup_leading(bp); |
6373 | if (rc) { | 6373 | if (rc) { |
6374 | BNX2X_ERR("Setup leading failed!\n"); | 6374 | BNX2X_ERR("Setup leading failed!\n"); |
6375 | goto load_stop_netif; | 6375 | goto load_netif_stop; |
6376 | } | 6376 | } |
6377 | 6377 | ||
6378 | if (CHIP_IS_E1H(bp)) | 6378 | if (CHIP_IS_E1H(bp)) |
@@ -6385,7 +6385,7 @@ static int bnx2x_nic_load(struct bnx2x *bp, int load_mode) | |||
6385 | for_each_nondefault_queue(bp, i) { | 6385 | for_each_nondefault_queue(bp, i) { |
6386 | rc = bnx2x_setup_multi(bp, i); | 6386 | rc = bnx2x_setup_multi(bp, i); |
6387 | if (rc) | 6387 | if (rc) |
6388 | goto load_stop_netif; | 6388 | goto load_netif_stop; |
6389 | } | 6389 | } |
6390 | 6390 | ||
6391 | if (CHIP_IS_E1(bp)) | 6391 | if (CHIP_IS_E1(bp)) |
@@ -6430,20 +6430,18 @@ static int bnx2x_nic_load(struct bnx2x *bp, int load_mode) | |||
6430 | 6430 | ||
6431 | return 0; | 6431 | return 0; |
6432 | 6432 | ||
6433 | load_stop_netif: | 6433 | load_netif_stop: |
6434 | for_each_queue(bp, i) | 6434 | for_each_queue(bp, i) |
6435 | napi_disable(&bnx2x_fp(bp, i, napi)); | 6435 | napi_disable(&bnx2x_fp(bp, i, napi)); |
6436 | 6436 | load_rings_free: | |
6437 | load_int_disable: | ||
6438 | bnx2x_int_disable_sync(bp); | ||
6439 | |||
6440 | /* Release IRQs */ | ||
6441 | bnx2x_free_irq(bp); | ||
6442 | |||
6443 | /* Free SKBs, SGEs, TPA pool and driver internals */ | 6437 | /* Free SKBs, SGEs, TPA pool and driver internals */ |
6444 | bnx2x_free_skbs(bp); | 6438 | bnx2x_free_skbs(bp); |
6445 | for_each_queue(bp, i) | 6439 | for_each_queue(bp, i) |
6446 | bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE); | 6440 | bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE); |
6441 | load_int_disable: | ||
6442 | bnx2x_int_disable_sync(bp); | ||
6443 | /* Release IRQs */ | ||
6444 | bnx2x_free_irq(bp); | ||
6447 | load_error: | 6445 | load_error: |
6448 | bnx2x_free_mem(bp); | 6446 | bnx2x_free_mem(bp); |
6449 | 6447 | ||