]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.38 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Wed, 18 May 2011 23:42:00 +0000 (16:42 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 18 May 2011 23:42:00 +0000 (16:42 -0700)
queue-2.6.38/ehea-fix-memory-hotplug-oops.patch [new file with mode: 0644]
queue-2.6.38/hydra-fix-regression-caused-during-net_device_ops-conversion.patch [new file with mode: 0644]
queue-2.6.38/libertas-fix-cmdpendingq-locking.patch [new file with mode: 0644]
queue-2.6.38/ne-h8300-fix-regression-caused-during-net_device_ops-conversion.patch [new file with mode: 0644]
queue-2.6.38/series
queue-2.6.38/zorro8390-fix-regression-caused-during-net_device_ops-conversion.patch [new file with mode: 0644]

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 (file)
index 0000000..5b85287
--- /dev/null
@@ -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 (file)
index 0000000..4872ec5
--- /dev/null
@@ -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 (file)
index 0000000..514c815
--- /dev/null
@@ -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 (file)
index 0000000..9d226f9
--- /dev/null
@@ -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]) {
index c2beec0659c54b21ae1214418b9b53ab39e85ba7..f3f7015c206e567b76716621fe00e7206c26f5fd 100644 (file)
@@ -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 (file)
index 0000000..449a569
--- /dev/null
@@ -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
+ };