netxen: cleanup mac list on driver unload
authorDhananjay Phadke <dhananjay@netxen.com>
Thu, 15 Jan 2009 04:49:22 +0000 (20:49 -0800)
committerDavid S. Miller <davem@davemloft.net>
Thu, 15 Jan 2009 04:49:22 +0000 (20:49 -0800)
This fixes a tiny memory leak when driver is unloaded. The mac
address list maintained in netxen_adapter needs to deleted when
driver is going down.

Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/netxen/netxen_nic.h
drivers/net/netxen/netxen_nic_hw.c
drivers/net/netxen/netxen_nic_main.c

index a674a23f72b493ddd8c3fdb246f131e4db4a4fbe..6598a34b87d463417f0d367cedec169a1959f6a2 100644 (file)
@@ -1478,6 +1478,7 @@ int netxen_process_cmd_ring(struct netxen_adapter *adapter);
 u32 netxen_process_rcv_ring(struct netxen_adapter *adapter, int ctx, int max);
 void netxen_p2_nic_set_multi(struct net_device *netdev);
 void netxen_p3_nic_set_multi(struct net_device *netdev);
+void netxen_p3_free_mac_list(struct netxen_adapter *adapter);
 int netxen_p3_nic_set_promisc(struct netxen_adapter *adapter, u32);
 int netxen_config_intr_coalesce(struct netxen_adapter *adapter);
 
index 511db2ac57c98d57c635acdcc4187bd1c4fe7c54..e2d2a2fdbe19c4cd825d41560f142de5a8df9332 100644 (file)
@@ -627,6 +627,19 @@ int netxen_p3_nic_set_promisc(struct netxen_adapter *adapter, u32 mode)
                                (struct cmd_desc_type0 *)&req, 1);
 }
 
+void netxen_p3_free_mac_list(struct netxen_adapter *adapter)
+{
+       nx_mac_list_t *cur, *next;
+
+       cur = adapter->mac_list;
+
+       while (cur) {
+               next = cur->next;
+               kfree(cur);
+               cur = next;
+       }
+}
+
 #define        NETXEN_CONFIG_INTR_COALESCE     3
 
 /*
index cbe2b3e814dd597657153ace4840ec1c913f7b71..9268fd2fbacf86e4f768e88d27dec79f8659edaf 100644 (file)
@@ -986,6 +986,9 @@ static void __devexit netxen_nic_remove(struct pci_dev *pdev)
                netxen_free_hw_resources(adapter);
                netxen_release_rx_buffers(adapter);
                netxen_free_sw_resources(adapter);
+
+               if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
+                       netxen_p3_free_mac_list(adapter);
        }
 
        if (adapter->portnum == 0)