]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.drivers/netxen-cleanup-mac-list-on-driver-unload.patch
Reenabled linux-xen, added patches for Xen Kernel Version 2.6.27.31,
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.drivers / netxen-cleanup-mac-list-on-driver-unload.patch
diff --git a/src/patches/suse-2.6.27.31/patches.drivers/netxen-cleanup-mac-list-on-driver-unload.patch b/src/patches/suse-2.6.27.31/patches.drivers/netxen-cleanup-mac-list-on-driver-unload.patch
new file mode 100644 (file)
index 0000000..af58b22
--- /dev/null
@@ -0,0 +1,69 @@
+From 06e9d9f9783860fe4c602ef491f47211804ccc96 Mon Sep 17 00:00:00 2001
+From: Dhananjay Phadke <dhananjay@netxen.com>
+Date: Wed, 14 Jan 2009 20:49:22 -0800
+Subject: netxen: cleanup mac list on driver unload
+Acked-by: Karsten Keil <kkeil@novell.com>
+Reference: bnc#472416
+
+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      |    1 +
+ drivers/net/netxen/netxen_nic_hw.c   |   13 +++++++++++++
+ drivers/net/netxen/netxen_nic_main.c |    3 +++
+ 3 files changed, 17 insertions(+), 0 deletions(-)
+
+Index: linux-2.6.27-kketmp/drivers/net/netxen/netxen_nic.h
+===================================================================
+--- linux-2.6.27-kketmp.orig/drivers/net/netxen/netxen_nic.h
++++ linux-2.6.27-kketmp/drivers/net/netxen/netxen_nic.h
+@@ -1478,6 +1478,7 @@ int netxen_process_cmd_ring(struct netxe
+ 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: linux-2.6.27-kketmp/drivers/net/netxen/netxen_nic_hw.c
+===================================================================
+--- linux-2.6.27-kketmp.orig/drivers/net/netxen/netxen_nic_hw.c
++++ linux-2.6.27-kketmp/drivers/net/netxen/netxen_nic_hw.c
+@@ -627,6 +627,19 @@ int netxen_p3_nic_set_promisc(struct net
+                               (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: linux-2.6.27-kketmp/drivers/net/netxen/netxen_nic_main.c
+===================================================================
+--- linux-2.6.27-kketmp.orig/drivers/net/netxen/netxen_nic_main.c
++++ linux-2.6.27-kketmp/drivers/net/netxen/netxen_nic_main.c
+@@ -975,6 +975,9 @@ static void __devexit netxen_nic_remove(
+               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)