diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2011-05-18 16:42:00 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-05-18 16:42:00 -0700 |
commit | b8704b87f415a7de55cce66a6643fbc0a558c7e9 (patch) | |
tree | 5221958020e571ce8a6c6ff0b4edbc5178865f55 | |
parent | fc5cd31632f9043ad674038820ee34c3592021fb (diff) | |
download | stable-queue-b8704b87f415a7de55cce66a6643fbc0a558c7e9.tar.gz |
.38 patches
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 + }; + |