tg3: Fix a memory leak on 5717+ devices
authorMatt Carlson <mcarlson@broadcom.com>
Sat, 5 Jun 2010 17:24:32 +0000 (17:24 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 7 Jun 2010 00:55:59 +0000 (17:55 -0700)
The rx resources for MSI-X interrupt vector 0 were not being freed
correctly.  This happens because the teardown loop continue's to the
next loop iteration if it detects the tx ring for that vector is not
setup, thus bypassing the rx teardown code.  This patch moves the
call to tg3_rx_prodring_free() earlier in the loop.

Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/tg3.c

index 057e8ebc1b25189d88d839b525260160495cab3e..86f8798a88e29c7cc4aa19b3d0b3a248ed431ec5 100644 (file)
@@ -6229,6 +6229,8 @@ static void tg3_free_rings(struct tg3 *tp)
        for (j = 0; j < tp->irq_cnt; j++) {
                struct tg3_napi *tnapi = &tp->napi[j];
 
+               tg3_rx_prodring_free(tp, &tp->prodring[j]);
+
                if (!tnapi->tx_buffers)
                        continue;
 
@@ -6264,8 +6266,6 @@ static void tg3_free_rings(struct tg3 *tp)
 
                        dev_kfree_skb_any(skb);
                }
-
-               tg3_rx_prodring_free(tp, &tp->prodring[j]);
        }
 }