summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2011-05-18 16:42:00 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2011-05-18 16:42:00 -0700
commitb8704b87f415a7de55cce66a6643fbc0a558c7e9 (patch)
tree5221958020e571ce8a6c6ff0b4edbc5178865f55
parentfc5cd31632f9043ad674038820ee34c3592021fb (diff)
downloadstable-queue-b8704b87f415a7de55cce66a6643fbc0a558c7e9.tar.gz
.38 patches
-rw-r--r--queue-2.6.38/ehea-fix-memory-hotplug-oops.patch72
-rw-r--r--queue-2.6.38/hydra-fix-regression-caused-during-net_device_ops-conversion.patch73
-rw-r--r--queue-2.6.38/libertas-fix-cmdpendingq-locking.patch60
-rw-r--r--queue-2.6.38/ne-h8300-fix-regression-caused-during-net_device_ops-conversion.patch82
-rw-r--r--queue-2.6.38/series5
-rw-r--r--queue-2.6.38/zorro8390-fix-regression-caused-during-net_device_ops-conversion.patch75
6 files changed, 367 insertions, 0 deletions
diff --git a/queue-2.6.38/ehea-fix-memory-hotplug-oops.patch b/queue-2.6.38/ehea-fix-memory-hotplug-oops.patch
new file mode 100644
index 0000000000..5b852873bc
--- /dev/null
+++ b/queue-2.6.38/ehea-fix-memory-hotplug-oops.patch
@@ -0,0 +1,72 @@
+From 21ccc7936dac5ca9b3e2838bbc112a60f34e18b3 Mon Sep 17 00:00:00 2001
+From: Anton Blanchard <anton@samba.org>
+Date: Tue, 10 May 2011 16:17:10 +0000
+Subject: ehea: Fix memory hotplug oops
+
+From: Anton Blanchard <anton@samba.org>
+
+commit 21ccc7936dac5ca9b3e2838bbc112a60f34e18b3 upstream.
+
+The ehea driver oopses during memory hotplug if the ports are not
+up. A simple testcase:
+
+# ifconfig ethX down
+# echo offline > /sys/devices/system/memory/memory32/state
+
+Oops: Kernel access of bad area, sig: 11 [#1]
+last sysfs file: /sys/devices/system/memory/memory32/state
+REGS: c000000709393110 TRAP: 0300 Not tainted (2.6.39-rc2-01385-g7ef73bc-dirty)
+DAR: 0000000000000000, DSISR: 40000000
+...
+NIP [c000000000067c98] .__wake_up_common+0x48/0xf0
+LR [c00000000006d034] .__wake_up+0x54/0x90
+Call Trace:
+[c00000000006d034] .__wake_up+0x54/0x90
+[d000000006bb6270] .ehea_rereg_mrs+0x140/0x730 [ehea]
+[d000000006bb69c4] .ehea_mem_notifier+0x164/0x170 [ehea]
+[c0000000006fc8a8] .notifier_call_chain+0x78/0xf0
+[c0000000000b3d70] .__blocking_notifier_call_chain+0x70/0xb0
+[c000000000458d78] .memory_notify+0x28/0x40
+[c0000000001871d8] .remove_memory+0x208/0x6d0
+[c000000000458264] .memory_section_action+0x94/0x140
+[c0000000004583ec] .memory_block_change_state+0xdc/0x1d0
+[c0000000004585cc] .store_mem_state+0xec/0x160
+[c00000000044768c] .sysdev_store+0x3c/0x50
+[c00000000020b48c] .sysfs_write_file+0xec/0x1f0
+[c00000000018f86c] .vfs_write+0xec/0x1e0
+[c00000000018fa88] .SyS_write+0x58/0xd0
+
+To fix this, initialise the waitqueues during port probe instead
+of port open.
+
+Signed-off-by: Anton Blanchard <anton@samba.org>
+Acked-by: Breno Leitao <leitao@linux.vnet.ibm.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/ehea/ehea_main.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/ehea/ehea_main.c
++++ b/drivers/net/ehea/ehea_main.c
+@@ -2688,9 +2688,6 @@ static int ehea_open(struct net_device *
+ netif_start_queue(dev);
+ }
+
+- init_waitqueue_head(&port->swqe_avail_wq);
+- init_waitqueue_head(&port->restart_wq);
+-
+ mutex_unlock(&port->port_lock);
+
+ return ret;
+@@ -3273,6 +3270,9 @@ struct ehea_port *ehea_setup_single_port
+
+ INIT_WORK(&port->reset_task, ehea_reset_port);
+
++ init_waitqueue_head(&port->swqe_avail_wq);
++ init_waitqueue_head(&port->restart_wq);
++
+ ret = register_netdev(dev);
+ if (ret) {
+ pr_err("register_netdev failed. ret=%d\n", ret);
diff --git a/queue-2.6.38/hydra-fix-regression-caused-during-net_device_ops-conversion.patch b/queue-2.6.38/hydra-fix-regression-caused-during-net_device_ops-conversion.patch
new file mode 100644
index 0000000000..4872ec5608
--- /dev/null
+++ b/queue-2.6.38/hydra-fix-regression-caused-during-net_device_ops-conversion.patch
@@ -0,0 +1,73 @@
+From 0b25e0157dfa236a0629c16c8ad6f222f633f682 Mon Sep 17 00:00:00 2001
+From: Geert Uytterhoeven <geert@linux-m68k.org>
+Date: Thu, 12 May 2011 09:11:39 +0000
+Subject: hydra: Fix regression caused during net_device_ops conversion
+
+From: Geert Uytterhoeven <geert@linux-m68k.org>
+
+commit 0b25e0157dfa236a0629c16c8ad6f222f633f682 upstream.
+
+Changeset 5618f0d1193d6b051da9b59b0e32ad24397f06a4 ("hydra: convert to
+net_device_ops") broke hydra by adding 8390.o to the link. That
+meant that lib8390.c was included twice, once in hydra.c and once in
+8390.c, subject to different macros. This patch reverts that by
+avoiding the wrappers in 8390.c.
+
+Fix based on commits 217cbfa856dc1cbc2890781626c4032d9e3ec59f ("mac8390:
+fix regression caused during net_device_ops conversion") and
+4e0168fa4842e27795a75b205a510f25b62181d9 ("mac8390: fix build with
+NET_POLL_CONTROLLER").
+
+Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/Makefile | 2 +-
+ drivers/net/hydra.c | 14 +++++++-------
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+--- a/drivers/net/Makefile
++++ b/drivers/net/Makefile
+@@ -229,7 +229,7 @@ obj-$(CONFIG_SGI_IOC3_ETH) += ioc3-eth.o
+ obj-$(CONFIG_DECLANCE) += declance.o
+ obj-$(CONFIG_ATARILANCE) += atarilance.o
+ obj-$(CONFIG_A2065) += a2065.o
+-obj-$(CONFIG_HYDRA) += hydra.o 8390.o
++obj-$(CONFIG_HYDRA) += hydra.o
+ obj-$(CONFIG_ARIADNE) += ariadne.o
+ obj-$(CONFIG_CS89x0) += cs89x0.o
+ obj-$(CONFIG_MACSONIC) += macsonic.o
+--- a/drivers/net/hydra.c
++++ b/drivers/net/hydra.c
+@@ -98,15 +98,15 @@ static const struct net_device_ops hydra
+ .ndo_open = hydra_open,
+ .ndo_stop = hydra_close,
+
+- .ndo_start_xmit = ei_start_xmit,
+- .ndo_tx_timeout = ei_tx_timeout,
+- .ndo_get_stats = ei_get_stats,
+- .ndo_set_multicast_list = ei_set_multicast_list,
++ .ndo_start_xmit = __ei_start_xmit,
++ .ndo_tx_timeout = __ei_tx_timeout,
++ .ndo_get_stats = __ei_get_stats,
++ .ndo_set_multicast_list = __ei_set_multicast_list,
+ .ndo_validate_addr = eth_validate_addr,
+- .ndo_set_mac_address = eth_mac_addr,
++ .ndo_set_mac_address = eth_mac_addr,
+ .ndo_change_mtu = eth_change_mtu,
+ #ifdef CONFIG_NET_POLL_CONTROLLER
+- .ndo_poll_controller = ei_poll,
++ .ndo_poll_controller = __ei_poll,
+ #endif
+ };
+
+@@ -125,7 +125,7 @@ static int __devinit hydra_init(struct z
+ 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e,
+ };
+
+- dev = alloc_ei_netdev();
++ dev = ____alloc_ei_netdev(0);
+ if (!dev)
+ return -ENOMEM;
+
diff --git a/queue-2.6.38/libertas-fix-cmdpendingq-locking.patch b/queue-2.6.38/libertas-fix-cmdpendingq-locking.patch
new file mode 100644
index 0000000000..514c815f5e
--- /dev/null
+++ b/queue-2.6.38/libertas-fix-cmdpendingq-locking.patch
@@ -0,0 +1,60 @@
+From 2ae1b8b35faba31a59b153cbad07f9c15de99740 Mon Sep 17 00:00:00 2001
+From: Paul Fox <pgf@laptop.org>
+Date: Mon, 9 May 2011 10:40:42 +0100
+Subject: libertas: fix cmdpendingq locking
+
+From: Paul Fox <pgf@laptop.org>
+
+commit 2ae1b8b35faba31a59b153cbad07f9c15de99740 upstream.
+
+We occasionally see list corruption using libertas.
+
+While we haven't been able to diagnose this precisely, we have spotted
+a possible cause: cmdpendingq is generally modified with driver_lock
+held. However, there are a couple of points where this is not the case.
+
+Fix up those operations to execute under the lock, it seems like
+the correct thing to do and will hopefully improve the situation.
+
+Signed-off-by: Paul Fox <pgf@laptop.org>
+Signed-off-by: Daniel Drake <dsd@laptop.org>
+Acked-by: Dan Williams <dcbw@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/libertas/cmd.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/libertas/cmd.c
++++ b/drivers/net/wireless/libertas/cmd.c
+@@ -1335,8 +1335,8 @@ int lbs_execute_next_command(struct lbs_
+ cpu_to_le16(PS_MODE_ACTION_EXIT_PS)) {
+ lbs_deb_host(
+ "EXEC_NEXT_CMD: ignore ENTER_PS cmd\n");
+- list_del(&cmdnode->list);
+ spin_lock_irqsave(&priv->driver_lock, flags);
++ list_del(&cmdnode->list);
+ lbs_complete_command(priv, cmdnode, 0);
+ spin_unlock_irqrestore(&priv->driver_lock, flags);
+
+@@ -1348,8 +1348,8 @@ int lbs_execute_next_command(struct lbs_
+ (priv->psstate == PS_STATE_PRE_SLEEP)) {
+ lbs_deb_host(
+ "EXEC_NEXT_CMD: ignore EXIT_PS cmd in sleep\n");
+- list_del(&cmdnode->list);
+ spin_lock_irqsave(&priv->driver_lock, flags);
++ list_del(&cmdnode->list);
+ lbs_complete_command(priv, cmdnode, 0);
+ spin_unlock_irqrestore(&priv->driver_lock, flags);
+ priv->needtowakeup = 1;
+@@ -1362,7 +1362,9 @@ int lbs_execute_next_command(struct lbs_
+ "EXEC_NEXT_CMD: sending EXIT_PS\n");
+ }
+ }
++ spin_lock_irqsave(&priv->driver_lock, flags);
+ list_del(&cmdnode->list);
++ spin_unlock_irqrestore(&priv->driver_lock, flags);
+ lbs_deb_host("EXEC_NEXT_CMD: sending command 0x%04x\n",
+ le16_to_cpu(cmd->command));
+ lbs_submit_command(priv, cmdnode);
diff --git a/queue-2.6.38/ne-h8300-fix-regression-caused-during-net_device_ops-conversion.patch b/queue-2.6.38/ne-h8300-fix-regression-caused-during-net_device_ops-conversion.patch
new file mode 100644
index 0000000000..9d226f928d
--- /dev/null
+++ b/queue-2.6.38/ne-h8300-fix-regression-caused-during-net_device_ops-conversion.patch
@@ -0,0 +1,82 @@
+From 2592a7354092afd304a8c067319b15ab1e441e35 Mon Sep 17 00:00:00 2001
+From: Geert Uytterhoeven <geert@linux-m68k.org>
+Date: Thu, 12 May 2011 09:11:40 +0000
+Subject: ne-h8300: Fix regression caused during net_device_ops conversion
+
+From: Geert Uytterhoeven <geert@linux-m68k.org>
+
+commit 2592a7354092afd304a8c067319b15ab1e441e35 upstream.
+
+Changeset dcd39c90290297f6e6ed8a04bb20da7ac2b043c5 ("ne-h8300: convert to
+net_device_ops") broke ne-h8300 by adding 8390.o to the link. That
+meant that lib8390.c was included twice, once in ne-h8300.c and once in
+8390.c, subject to different macros. This patch reverts that by
+avoiding the wrappers in 8390.c.
+
+Fix based on commits 217cbfa856dc1cbc2890781626c4032d9e3ec59f ("mac8390:
+fix regression caused during net_device_ops conversion") and
+4e0168fa4842e27795a75b205a510f25b62181d9 ("mac8390: fix build with
+NET_POLL_CONTROLLER").
+
+Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/Makefile | 2 +-
+ drivers/net/ne-h8300.c | 16 ++++++++--------
+ 2 files changed, 9 insertions(+), 9 deletions(-)
+
+--- a/drivers/net/Makefile
++++ b/drivers/net/Makefile
+@@ -144,7 +144,7 @@ obj-$(CONFIG_NE3210) += ne3210.o 8390.o
+ obj-$(CONFIG_SB1250_MAC) += sb1250-mac.o
+ obj-$(CONFIG_B44) += b44.o
+ obj-$(CONFIG_FORCEDETH) += forcedeth.o
+-obj-$(CONFIG_NE_H8300) += ne-h8300.o 8390.o
++obj-$(CONFIG_NE_H8300) += ne-h8300.o
+ obj-$(CONFIG_AX88796) += ax88796.o
+ obj-$(CONFIG_BCM63XX_ENET) += bcm63xx_enet.o
+
+--- a/drivers/net/ne-h8300.c
++++ b/drivers/net/ne-h8300.c
+@@ -167,7 +167,7 @@ static void cleanup_card(struct net_devi
+ #ifndef MODULE
+ struct net_device * __init ne_probe(int unit)
+ {
+- struct net_device *dev = alloc_ei_netdev();
++ struct net_device *dev = ____alloc_ei_netdev(0);
+ int err;
+
+ if (!dev)
+@@ -197,15 +197,15 @@ static const struct net_device_ops ne_ne
+ .ndo_open = ne_open,
+ .ndo_stop = ne_close,
+
+- .ndo_start_xmit = ei_start_xmit,
+- .ndo_tx_timeout = ei_tx_timeout,
+- .ndo_get_stats = ei_get_stats,
+- .ndo_set_multicast_list = ei_set_multicast_list,
++ .ndo_start_xmit = __ei_start_xmit,
++ .ndo_tx_timeout = __ei_tx_timeout,
++ .ndo_get_stats = __ei_get_stats,
++ .ndo_set_multicast_list = __ei_set_multicast_list,
+ .ndo_validate_addr = eth_validate_addr,
+- .ndo_set_mac_address = eth_mac_addr,
++ .ndo_set_mac_address = eth_mac_addr,
+ .ndo_change_mtu = eth_change_mtu,
+ #ifdef CONFIG_NET_POLL_CONTROLLER
+- .ndo_poll_controller = ei_poll,
++ .ndo_poll_controller = __ei_poll,
+ #endif
+ };
+
+@@ -637,7 +637,7 @@ int init_module(void)
+ int err;
+
+ for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
+- struct net_device *dev = alloc_ei_netdev();
++ struct net_device *dev = ____alloc_ei_netdev(0);
+ if (!dev)
+ break;
+ if (io[this_dev]) {
diff --git a/queue-2.6.38/series b/queue-2.6.38/series
index c2beec0659..f3f7015c20 100644
--- a/queue-2.6.38/series
+++ b/queue-2.6.38/series
@@ -38,3 +38,8 @@ net-dev_close-should-check-iff_up.patch
slcan-fix-ldisc-open-retval.patch
asoc-uda134x-remove-power_off_on_standby-define.patch
asoc-ssm2602-fix-mic-boost2-control.patch
+ne-h8300-fix-regression-caused-during-net_device_ops-conversion.patch
+hydra-fix-regression-caused-during-net_device_ops-conversion.patch
+ehea-fix-memory-hotplug-oops.patch
+libertas-fix-cmdpendingq-locking.patch
+zorro8390-fix-regression-caused-during-net_device_ops-conversion.patch
diff --git a/queue-2.6.38/zorro8390-fix-regression-caused-during-net_device_ops-conversion.patch b/queue-2.6.38/zorro8390-fix-regression-caused-during-net_device_ops-conversion.patch
new file mode 100644
index 0000000000..449a56923e
--- /dev/null
+++ b/queue-2.6.38/zorro8390-fix-regression-caused-during-net_device_ops-conversion.patch
@@ -0,0 +1,75 @@
+From cf7e032fc87d59c475df26c4d40bf45d401b2adb Mon Sep 17 00:00:00 2001
+From: Geert Uytterhoeven <geert@linux-m68k.org>
+Date: Thu, 12 May 2011 09:11:38 +0000
+Subject: zorro8390: Fix regression caused during net_device_ops conversion
+
+From: Geert Uytterhoeven <geert@linux-m68k.org>
+
+commit cf7e032fc87d59c475df26c4d40bf45d401b2adb upstream.
+
+Changeset b6114794a1c394534659f4a17420e48cf23aa922 ("zorro8390: convert to
+net_device_ops") broke zorro8390 by adding 8390.o to the link. That
+meant that lib8390.c was included twice, once in zorro8390.c and once in
+8390.c, subject to different macros. This patch reverts that by
+avoiding the wrappers in 8390.c.
+
+Fix based on commits 217cbfa856dc1cbc2890781626c4032d9e3ec59f ("mac8390:
+fix regression caused during net_device_ops conversion") and
+4e0168fa4842e27795a75b205a510f25b62181d9 ("mac8390: fix build with
+NET_POLL_CONTROLLER").
+
+Reported-by: Christian T. Steigies <cts@debian.org>
+Suggested-by: Finn Thain <fthain@telegraphics.com.au>
+Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Tested-by: Christian T. Steigies <cts@debian.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/Makefile | 2 +-
+ drivers/net/zorro8390.c | 12 ++++++------
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+--- a/drivers/net/Makefile
++++ b/drivers/net/Makefile
+@@ -217,7 +217,7 @@ obj-$(CONFIG_SC92031) += sc92031.o
+ obj-$(CONFIG_LP486E) += lp486e.o
+
+ obj-$(CONFIG_ETH16I) += eth16i.o
+-obj-$(CONFIG_ZORRO8390) += zorro8390.o 8390.o
++obj-$(CONFIG_ZORRO8390) += zorro8390.o
+ obj-$(CONFIG_HPLANCE) += hplance.o 7990.o
+ obj-$(CONFIG_MVME147_NET) += mvme147.o 7990.o
+ obj-$(CONFIG_EQUALIZER) += eql.o
+--- a/drivers/net/zorro8390.c
++++ b/drivers/net/zorro8390.c
+@@ -126,7 +126,7 @@ static int __devinit zorro8390_init_one(
+
+ board = z->resource.start;
+ ioaddr = board+cards[i].offset;
+- dev = alloc_ei_netdev();
++ dev = ____alloc_ei_netdev(0);
+ if (!dev)
+ return -ENOMEM;
+ if (!request_mem_region(ioaddr, NE_IO_EXTENT*2, DRV_NAME)) {
+@@ -146,15 +146,15 @@ static int __devinit zorro8390_init_one(
+ static const struct net_device_ops zorro8390_netdev_ops = {
+ .ndo_open = zorro8390_open,
+ .ndo_stop = zorro8390_close,
+- .ndo_start_xmit = ei_start_xmit,
+- .ndo_tx_timeout = ei_tx_timeout,
+- .ndo_get_stats = ei_get_stats,
+- .ndo_set_multicast_list = ei_set_multicast_list,
++ .ndo_start_xmit = __ei_start_xmit,
++ .ndo_tx_timeout = __ei_tx_timeout,
++ .ndo_get_stats = __ei_get_stats,
++ .ndo_set_multicast_list = __ei_set_multicast_list,
+ .ndo_validate_addr = eth_validate_addr,
+ .ndo_set_mac_address = eth_mac_addr,
+ .ndo_change_mtu = eth_change_mtu,
+ #ifdef CONFIG_NET_POLL_CONTROLLER
+- .ndo_poll_controller = ei_poll,
++ .ndo_poll_controller = __ei_poll,
+ #endif
+ };
+