summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEilon Greenstein <eilong@broadcom.com>2009-01-22 06:01:25 +0000
committerDavid S. Miller <davem@davemloft.net>2009-01-22 13:47:11 -0800
commit7cde1c8b79f913a0158bae4f4c612de2cb98e7e4 (patch)
treee280fa10b43723fe9cd8e0872264cdc6e9d6a974
parent6eccabb301d442e6106ecc84b07a976c2816d9fb (diff)
downloadlinux-next-7cde1c8b79f913a0158bae4f4c612de2cb98e7e4.tar.gz
bnx2x: Calling napi_del
rmmod might hang without this patch since the reference counter is not going down 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>
-rw-r--r--drivers/net/bnx2x_main.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/bnx2x_main.c b/drivers/net/bnx2x_main.c
index fbd71659cca6..71fbf2dbda3b 100644
--- a/drivers/net/bnx2x_main.c
+++ b/drivers/net/bnx2x_main.c
@@ -6547,6 +6547,8 @@ load_error2:
bnx2x_free_irq(bp);
load_error1:
bnx2x_napi_disable(bp);
+ for_each_queue(bp, i)
+ netif_napi_del(&bnx2x_fp(bp, i, napi));
bnx2x_free_mem(bp);
/* TBD we really need to reset the chip
@@ -6855,6 +6857,8 @@ unload_error:
bnx2x_free_skbs(bp);
for_each_queue(bp, i)
bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE);
+ for_each_queue(bp, i)
+ netif_napi_del(&bnx2x_fp(bp, i, napi));
bnx2x_free_mem(bp);
bp->state = BNX2X_STATE_CLOSED;
@@ -10481,6 +10485,8 @@ static int bnx2x_eeh_nic_unload(struct bnx2x *bp)
bnx2x_free_skbs(bp);
for_each_queue(bp, i)
bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE);
+ for_each_queue(bp, i)
+ netif_napi_del(&bnx2x_fp(bp, i, napi));
bnx2x_free_mem(bp);
bp->state = BNX2X_STATE_CLOSED;