]>
Commit | Line | Data |
---|---|---|
00e5a55c BS |
1 | From 06e9d9f9783860fe4c602ef491f47211804ccc96 Mon Sep 17 00:00:00 2001 |
2 | From: Dhananjay Phadke <dhananjay@netxen.com> | |
3 | Date: Wed, 14 Jan 2009 20:49:22 -0800 | |
4 | Subject: netxen: cleanup mac list on driver unload | |
5 | Acked-by: Karsten Keil <kkeil@novell.com> | |
6 | Reference: bnc#472416 | |
7 | ||
8 | This fixes a tiny memory leak when driver is unloaded. The mac | |
9 | address list maintained in netxen_adapter needs to deleted when | |
10 | driver is going down. | |
11 | ||
12 | Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com> | |
13 | Signed-off-by: David S. Miller <davem@davemloft.net> | |
14 | --- | |
15 | drivers/net/netxen/netxen_nic.h | 1 + | |
16 | drivers/net/netxen/netxen_nic_hw.c | 13 +++++++++++++ | |
17 | drivers/net/netxen/netxen_nic_main.c | 3 +++ | |
18 | 3 files changed, 17 insertions(+), 0 deletions(-) | |
19 | ||
20 | Index: linux-2.6.27-kketmp/drivers/net/netxen/netxen_nic.h | |
21 | =================================================================== | |
22 | --- linux-2.6.27-kketmp.orig/drivers/net/netxen/netxen_nic.h | |
23 | +++ linux-2.6.27-kketmp/drivers/net/netxen/netxen_nic.h | |
24 | @@ -1478,6 +1478,7 @@ int netxen_process_cmd_ring(struct netxe | |
25 | u32 netxen_process_rcv_ring(struct netxen_adapter *adapter, int ctx, int max); | |
26 | void netxen_p2_nic_set_multi(struct net_device *netdev); | |
27 | void netxen_p3_nic_set_multi(struct net_device *netdev); | |
28 | +void netxen_p3_free_mac_list(struct netxen_adapter *adapter); | |
29 | int netxen_p3_nic_set_promisc(struct netxen_adapter *adapter, u32); | |
30 | int netxen_config_intr_coalesce(struct netxen_adapter *adapter); | |
31 | ||
32 | Index: linux-2.6.27-kketmp/drivers/net/netxen/netxen_nic_hw.c | |
33 | =================================================================== | |
34 | --- linux-2.6.27-kketmp.orig/drivers/net/netxen/netxen_nic_hw.c | |
35 | +++ linux-2.6.27-kketmp/drivers/net/netxen/netxen_nic_hw.c | |
36 | @@ -627,6 +627,19 @@ int netxen_p3_nic_set_promisc(struct net | |
37 | (struct cmd_desc_type0 *)&req, 1); | |
38 | } | |
39 | ||
40 | +void netxen_p3_free_mac_list(struct netxen_adapter *adapter) | |
41 | +{ | |
42 | + nx_mac_list_t *cur, *next; | |
43 | + | |
44 | + cur = adapter->mac_list; | |
45 | + | |
46 | + while (cur) { | |
47 | + next = cur->next; | |
48 | + kfree(cur); | |
49 | + cur = next; | |
50 | + } | |
51 | +} | |
52 | + | |
53 | #define NETXEN_CONFIG_INTR_COALESCE 3 | |
54 | ||
55 | /* | |
56 | Index: linux-2.6.27-kketmp/drivers/net/netxen/netxen_nic_main.c | |
57 | =================================================================== | |
58 | --- linux-2.6.27-kketmp.orig/drivers/net/netxen/netxen_nic_main.c | |
59 | +++ linux-2.6.27-kketmp/drivers/net/netxen/netxen_nic_main.c | |
60 | @@ -975,6 +975,9 @@ static void __devexit netxen_nic_remove( | |
61 | netxen_free_hw_resources(adapter); | |
62 | netxen_release_rx_buffers(adapter); | |
63 | netxen_free_sw_resources(adapter); | |
64 | + | |
65 | + if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) | |
66 | + netxen_p3_free_mac_list(adapter); | |
67 | } | |
68 | ||
69 | if (adapter->portnum == 0) |