]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.0 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 8 Nov 2011 20:30:14 +0000 (12:30 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 8 Nov 2011 20:30:14 +0000 (12:30 -0800)
added patches:
acpi-atomicio-convert-width-in-bits-to-bytes-in-__acpi_ioremap_fast.patch
ath9k_hw-update-ar9485-initvals-to-fix-system-hang-issue.patch
mac80211-config-hw-when-going-back-on-channel.patch
mac80211-disable-powersave-for-broken-aps.patch
mac80211-fix-remain_off_channel-regression.patch
mtd-mtdchar-add-missing-initializer-on-raw-write.patch
netlink-validate-nla_msecs-length.patch
powerpc-eeh-fix-proc-ppc64-eeh-creation.patch
powerpc-fix-deadlock-in-icswx-code.patch
powerpc-fix-oops-when-echoing-bad-values-to-sys-devices-system-memory-probe.patch
powerpc-numa-remove-double-of_node_put-in-hot_add_node_scn_to_nid.patch
powerpc-pseries-avoid-spurious-error-during-hotplug-cpu-add.patch

13 files changed:
queue-3.0/acpi-atomicio-convert-width-in-bits-to-bytes-in-__acpi_ioremap_fast.patch [new file with mode: 0644]
queue-3.0/ath9k_hw-update-ar9485-initvals-to-fix-system-hang-issue.patch [new file with mode: 0644]
queue-3.0/mac80211-config-hw-when-going-back-on-channel.patch [new file with mode: 0644]
queue-3.0/mac80211-disable-powersave-for-broken-aps.patch [new file with mode: 0644]
queue-3.0/mac80211-fix-remain_off_channel-regression.patch [new file with mode: 0644]
queue-3.0/mtd-mtdchar-add-missing-initializer-on-raw-write.patch [new file with mode: 0644]
queue-3.0/netlink-validate-nla_msecs-length.patch [new file with mode: 0644]
queue-3.0/powerpc-eeh-fix-proc-ppc64-eeh-creation.patch [new file with mode: 0644]
queue-3.0/powerpc-fix-deadlock-in-icswx-code.patch [new file with mode: 0644]
queue-3.0/powerpc-fix-oops-when-echoing-bad-values-to-sys-devices-system-memory-probe.patch [new file with mode: 0644]
queue-3.0/powerpc-numa-remove-double-of_node_put-in-hot_add_node_scn_to_nid.patch [new file with mode: 0644]
queue-3.0/powerpc-pseries-avoid-spurious-error-during-hotplug-cpu-add.patch [new file with mode: 0644]
queue-3.0/series

diff --git a/queue-3.0/acpi-atomicio-convert-width-in-bits-to-bytes-in-__acpi_ioremap_fast.patch b/queue-3.0/acpi-atomicio-convert-width-in-bits-to-bytes-in-__acpi_ioremap_fast.patch
new file mode 100644 (file)
index 0000000..9a14cfa
--- /dev/null
@@ -0,0 +1,32 @@
+From 3bf3f8b19d2bfccc40f13c456bf339fd8f535ebc Mon Sep 17 00:00:00 2001
+From: "Luck, Tony" <tony.luck@intel.com>
+Date: Fri, 21 Oct 2011 14:42:55 -0700
+Subject: ACPI atomicio: Convert width in bits to bytes in __acpi_ioremap_fast()
+
+From: "Luck, Tony" <tony.luck@intel.com>
+
+commit 3bf3f8b19d2bfccc40f13c456bf339fd8f535ebc upstream.
+
+Callers to __acpi_ioremap_fast() pass the bit_width that they found in the
+acpi_generic_address structure. Convert from bits to bytes when passing to
+__acpi_find_iomap() - as it wants to see bytes, not bits.
+
+Signed-off-by: Tony Luck <tony.luck@intel.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/atomicio.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/acpi/atomicio.c
++++ b/drivers/acpi/atomicio.c
+@@ -76,7 +76,7 @@ static void __iomem *__acpi_ioremap_fast
+ {
+       struct acpi_iomap *map;
+-      map = __acpi_find_iomap(paddr, size);
++      map = __acpi_find_iomap(paddr, size/8);
+       if (map)
+               return map->vaddr + (paddr - map->paddr);
+       else
diff --git a/queue-3.0/ath9k_hw-update-ar9485-initvals-to-fix-system-hang-issue.patch b/queue-3.0/ath9k_hw-update-ar9485-initvals-to-fix-system-hang-issue.patch
new file mode 100644 (file)
index 0000000..2f11105
--- /dev/null
@@ -0,0 +1,67 @@
+From 98fb2cc115b4ef1ea0a2d87a170c183bd395dd6c Mon Sep 17 00:00:00 2001
+From: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
+Date: Mon, 24 Oct 2011 18:13:40 +0530
+Subject: ath9k_hw: Update AR9485 initvals to fix system hang issue
+
+From: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
+
+commit 98fb2cc115b4ef1ea0a2d87a170c183bd395dd6c upstream.
+
+This patch fixes system hang when resuming from S3 state
+and lower rate sens failure issue.
+
+Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/ath/ath9k/ar9485_initvals.h |   10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/ar9485_initvals.h
++++ b/drivers/net/wireless/ath/ath9k/ar9485_initvals.h
+@@ -521,7 +521,7 @@ static const u32 ar9485_1_1_radio_postam
+       {0x000160ac, 0x24611800},
+       {0x000160b0, 0x03284f3e},
+       {0x0001610c, 0x00170000},
+-      {0x00016140, 0x10804008},
++      {0x00016140, 0x50804008},
+ };
+ static const u32 ar9485_1_1_mac_postamble[][5] = {
+@@ -603,7 +603,7 @@ static const u32 ar9485_1_1_radio_core[]
+ static const u32 ar9485_1_1_pcie_phy_pll_on_clkreq_enable_L1[][2] = {
+       /* Addr        allmodes */
+-      {0x00018c00, 0x10052e5e},
++      {0x00018c00, 0x18052e5e},
+       {0x00018c04, 0x000801d8},
+       {0x00018c08, 0x0000080c},
+ };
+@@ -776,7 +776,7 @@ static const u32 ar9485_modes_green_ob_d
+ static const u32 ar9485_1_1_pcie_phy_clkreq_disable_L1[][2] = {
+       /* Addr        allmodes */
+-      {0x00018c00, 0x10013e5e},
++      {0x00018c00, 0x18013e5e},
+       {0x00018c04, 0x000801d8},
+       {0x00018c08, 0x0000080c},
+ };
+@@ -882,7 +882,7 @@ static const u32 ar9485_fast_clock_1_1_b
+ static const u32 ar9485_1_1_pcie_phy_pll_on_clkreq_disable_L1[][2] = {
+       /* Addr        allmodes  */
+-      {0x00018c00, 0x10012e5e},
++      {0x00018c00, 0x18012e5e},
+       {0x00018c04, 0x000801d8},
+       {0x00018c08, 0x0000080c},
+ };
+@@ -1021,7 +1021,7 @@ static const u32 ar9485_common_rx_gain_1
+ static const u32 ar9485_1_1_pcie_phy_clkreq_enable_L1[][2] = {
+       /* Addr        allmodes */
+-      {0x00018c00, 0x10053e5e},
++      {0x00018c00, 0x18053e5e},
+       {0x00018c04, 0x000801d8},
+       {0x00018c08, 0x0000080c},
+ };
diff --git a/queue-3.0/mac80211-config-hw-when-going-back-on-channel.patch b/queue-3.0/mac80211-config-hw-when-going-back-on-channel.patch
new file mode 100644 (file)
index 0000000..c58e5c4
--- /dev/null
@@ -0,0 +1,40 @@
+From 6911bf0453e0d6ea8eb694a4ce67a68d071c538e Mon Sep 17 00:00:00 2001
+From: Eliad Peller <eliad@wizery.com>
+Date: Thu, 20 Oct 2011 19:05:50 +0200
+Subject: mac80211: config hw when going back on-channel
+
+From: Eliad Peller <eliad@wizery.com>
+
+commit 6911bf0453e0d6ea8eb694a4ce67a68d071c538e upstream.
+
+When going back on-channel, we should reconfigure
+the hw iff the hardware is not already configured
+to the operational channel.
+
+Signed-off-by: Eliad Peller <eliad@wizery.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/mac80211/work.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/net/mac80211/work.c
++++ b/net/mac80211/work.c
+@@ -1067,7 +1067,6 @@ static void ieee80211_work_work(struct w
+       }
+       if (!remain_off_channel && local->tmp_channel) {
+-              bool on_oper_chan = ieee80211_cfg_on_oper_channel(local);
+               local->tmp_channel = NULL;
+               /* If tmp_channel wasn't operating channel, then
+                * we need to go back on-channel.
+@@ -1077,7 +1076,7 @@ static void ieee80211_work_work(struct w
+                * we still need to do a hardware config.  Currently,
+                * we cannot be here while scanning, however.
+                */
+-              if (ieee80211_cfg_on_oper_channel(local) && !on_oper_chan)
++              if (!ieee80211_cfg_on_oper_channel(local))
+                       ieee80211_hw_config(local, 0);
+               /* At the least, we need to disable offchannel_ps,
diff --git a/queue-3.0/mac80211-disable-powersave-for-broken-aps.patch b/queue-3.0/mac80211-disable-powersave-for-broken-aps.patch
new file mode 100644 (file)
index 0000000..d2a09d9
--- /dev/null
@@ -0,0 +1,73 @@
+From 05cb91085760ca378f28fc274fbf77fc4fd9886c Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Fri, 28 Oct 2011 11:59:47 +0200
+Subject: mac80211: disable powersave for broken APs
+
+From: Johannes Berg <johannes.berg@intel.com>
+
+commit 05cb91085760ca378f28fc274fbf77fc4fd9886c upstream.
+
+Only AID values 1-2007 are valid, but some APs have been
+found to send random bogus values, in the reported case an
+AP that was sending the AID field value 0xffff, an AID of
+0x3fff (16383).
+
+There isn't much we can do but disable powersave since
+there's no way it can work properly in this case.
+
+Reported-by: Bill C Riemers <briemers@redhat.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/mac80211/ieee80211_i.h |    1 +
+ net/mac80211/mlme.c        |   18 ++++++++++++++++--
+ 2 files changed, 17 insertions(+), 2 deletions(-)
+
+--- a/net/mac80211/ieee80211_i.h
++++ b/net/mac80211/ieee80211_i.h
+@@ -373,6 +373,7 @@ struct ieee80211_if_managed {
+       unsigned long timers_running; /* used for quiesce/restart */
+       bool powersave; /* powersave requested for this iface */
++      bool broken_ap; /* AP is broken -- turn off powersave */
+       enum ieee80211_smps_mode req_smps, /* requested smps mode */
+                                ap_smps, /* smps mode AP thinks we're in */
+                                driver_smps_mode; /* smps mode request */
+--- a/net/mac80211/mlme.c
++++ b/net/mac80211/mlme.c
+@@ -613,6 +613,9 @@ static bool ieee80211_powersave_allowed(
+       if (!mgd->powersave)
+               return false;
++      if (mgd->broken_ap)
++              return false;
++
+       if (!mgd->associated)
+               return false;
+@@ -1450,10 +1453,21 @@ static bool ieee80211_assoc_success(stru
+       capab_info = le16_to_cpu(mgmt->u.assoc_resp.capab_info);
+       if ((aid & (BIT(15) | BIT(14))) != (BIT(15) | BIT(14)))
+-              printk(KERN_DEBUG "%s: invalid aid value %d; bits 15:14 not "
+-                     "set\n", sdata->name, aid);
++              printk(KERN_DEBUG
++                     "%s: invalid AID value 0x%x; bits 15:14 not set\n",
++                     sdata->name, aid);
+       aid &= ~(BIT(15) | BIT(14));
++      ifmgd->broken_ap = false;
++
++      if (aid == 0 || aid > IEEE80211_MAX_AID) {
++              printk(KERN_DEBUG
++                     "%s: invalid AID value %d (out of range), turn off PS\n",
++                     sdata->name, aid);
++              aid = 0;
++              ifmgd->broken_ap = true;
++      }
++
+       pos = mgmt->u.assoc_resp.variable;
+       ieee802_11_parse_elems(pos, len - (pos - (u8 *) mgmt), &elems);
diff --git a/queue-3.0/mac80211-fix-remain_off_channel-regression.patch b/queue-3.0/mac80211-fix-remain_off_channel-regression.patch
new file mode 100644 (file)
index 0000000..dd0f8c0
--- /dev/null
@@ -0,0 +1,44 @@
+From eaa7af2ae582c9a8c51b374c48d5970b748a5ce2 Mon Sep 17 00:00:00 2001
+From: Eliad Peller <eliad@wizery.com>
+Date: Thu, 20 Oct 2011 19:05:49 +0200
+Subject: mac80211: fix remain_off_channel regression
+
+From: Eliad Peller <eliad@wizery.com>
+
+commit eaa7af2ae582c9a8c51b374c48d5970b748a5ce2 upstream.
+
+The offchannel code is currently broken - we should
+remain_off_channel if the work was started, and
+the work's channel and channel_type are the same
+as local->tmp_channel and local->tmp_channel_type.
+
+However, if wk->chan_type and local->tmp_channel_type
+coexist (e.g. have the same channel type), we won't
+remain_off_channel.
+
+This behavior was introduced by commit da2fd1f
+("mac80211: Allow work items to use existing
+channel type.")
+
+Tested-by: Ben Greear <greearb@candelatech.com>
+Signed-off-by: Eliad Peller <eliad@wizery.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/mac80211/work.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/net/mac80211/work.c
++++ b/net/mac80211/work.c
+@@ -1060,8 +1060,8 @@ static void ieee80211_work_work(struct w
+                       continue;
+               if (wk->chan != local->tmp_channel)
+                       continue;
+-              if (ieee80211_work_ct_coexists(wk->chan_type,
+-                                             local->tmp_channel_type))
++              if (!ieee80211_work_ct_coexists(wk->chan_type,
++                                              local->tmp_channel_type))
+                       continue;
+               remain_off_channel = true;
+       }
diff --git a/queue-3.0/mtd-mtdchar-add-missing-initializer-on-raw-write.patch b/queue-3.0/mtd-mtdchar-add-missing-initializer-on-raw-write.patch
new file mode 100644 (file)
index 0000000..88be383
--- /dev/null
@@ -0,0 +1,35 @@
+From bf5140817b2d65faac9b32fc9057a097044ac35b Mon Sep 17 00:00:00 2001
+From: Peter Wippich <pewi@gw-instruments.de>
+Date: Mon, 6 Jun 2011 15:50:58 +0200
+Subject: mtd: mtdchar: add missing initializer on raw write
+
+From: Peter Wippich <pewi@gw-instruments.de>
+
+commit bf5140817b2d65faac9b32fc9057a097044ac35b upstream.
+
+On writes in MODE_RAW the mtd_oob_ops struct is not sufficiently
+initialized which may cause nandwrite to fail. With this patch
+it is possible to write raw nand/oob data without additional ECC
+(either for testing or when some sectors need different oob layout
+e.g. bootloader) like
+nandwrite  -n -r -o  /dev/mtd0 <myfile>
+
+Signed-off-by: Peter Wippich <pewi@gw-instruments.de>
+Tested-by: Ricard Wanderlof <ricardw@axis.com>
+Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/mtd/mtdchar.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/mtd/mtdchar.c
++++ b/drivers/mtd/mtdchar.c
+@@ -320,6 +320,7 @@ static ssize_t mtd_write(struct file *fi
+                       ops.mode = MTD_OOB_RAW;
+                       ops.datbuf = kbuf;
+                       ops.oobbuf = NULL;
++                      ops.ooboffs = 0;
+                       ops.len = len;
+                       ret = mtd->write_oob(mtd, *ppos, &ops);
diff --git a/queue-3.0/netlink-validate-nla_msecs-length.patch b/queue-3.0/netlink-validate-nla_msecs-length.patch
new file mode 100644 (file)
index 0000000..33cbbd9
--- /dev/null
@@ -0,0 +1,43 @@
+From c30bc94758ae2a38a5eb31767c1985c0aae0950b Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Thu, 3 Nov 2011 00:07:32 +0000
+Subject: netlink: validate NLA_MSECS length
+
+From: Johannes Berg <johannes.berg@intel.com>
+
+commit c30bc94758ae2a38a5eb31767c1985c0aae0950b upstream.
+
+L2TP for example uses NLA_MSECS like this:
+policy:
+        [L2TP_ATTR_RECV_TIMEOUT]        = { .type = NLA_MSECS, },
+code:
+        if (info->attrs[L2TP_ATTR_RECV_TIMEOUT])
+                cfg.reorder_timeout = nla_get_msecs(info->attrs[L2TP_ATTR_RECV_TIMEOUT]);
+
+As nla_get_msecs() is essentially nla_get_u64() plus the
+conversion to a HZ-based value, this will not properly
+reject attributes from userspace that aren't long enough
+and might overrun the message.
+
+Add NLA_MSECS to the attribute minlen array to check the
+size properly.
+
+Cc: Thomas Graf <tgraf@suug.ch>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ lib/nlattr.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/lib/nlattr.c
++++ b/lib/nlattr.c
+@@ -20,6 +20,7 @@ static const u16 nla_attr_minlen[NLA_TYP
+       [NLA_U16]       = sizeof(u16),
+       [NLA_U32]       = sizeof(u32),
+       [NLA_U64]       = sizeof(u64),
++      [NLA_MSECS]     = sizeof(u64),
+       [NLA_NESTED]    = NLA_HDRLEN,
+ };
diff --git a/queue-3.0/powerpc-eeh-fix-proc-ppc64-eeh-creation.patch b/queue-3.0/powerpc-eeh-fix-proc-ppc64-eeh-creation.patch
new file mode 100644 (file)
index 0000000..ec83f39
--- /dev/null
@@ -0,0 +1,36 @@
+From 8feaa43494cee5e938fd5a57b9e9bf1c827e6ccd Mon Sep 17 00:00:00 2001
+From: Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
+Date: Fri, 26 Aug 2011 10:36:31 +0000
+Subject: powerpc/eeh: Fix /proc/ppc64/eeh creation
+
+From: Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
+
+commit 8feaa43494cee5e938fd5a57b9e9bf1c827e6ccd upstream.
+
+Since commit 188917e183cf9ad0374b571006d0fc6d48a7f447, /proc/ppc64 is a
+symlink to /proc/powerpc/. That means that creating /proc/ppc64/eeh will
+end up with a unaccessible file, that is not listed under /proc/powerpc/
+and, then, not listed under /proc/ppc64/.
+
+Creating /proc/powerpc/eeh fixes that problem and maintain the
+compatibility intended with the ppc64 symlink.
+
+Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/powerpc/platforms/pseries/eeh.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/powerpc/platforms/pseries/eeh.c
++++ b/arch/powerpc/platforms/pseries/eeh.c
+@@ -1338,7 +1338,7 @@ static const struct file_operations proc
+ static int __init eeh_init_proc(void)
+ {
+       if (machine_is(pseries))
+-              proc_create("ppc64/eeh", 0, NULL, &proc_eeh_operations);
++              proc_create("powerpc/eeh", 0, NULL, &proc_eeh_operations);
+       return 0;
+ }
+ __initcall(eeh_init_proc);
diff --git a/queue-3.0/powerpc-fix-deadlock-in-icswx-code.patch b/queue-3.0/powerpc-fix-deadlock-in-icswx-code.patch
new file mode 100644 (file)
index 0000000..5e08fb9
--- /dev/null
@@ -0,0 +1,71 @@
+From 8bdafa39a47265bc029838b35cc6585f69224afa Mon Sep 17 00:00:00 2001
+From: Anton Blanchard <anton@samba.org>
+Date: Wed, 14 Sep 2011 09:43:15 +0000
+Subject: powerpc: Fix deadlock in icswx code
+
+From: Anton Blanchard <anton@samba.org>
+
+commit 8bdafa39a47265bc029838b35cc6585f69224afa upstream.
+
+The icswx code introduced an A-B B-A deadlock:
+
+     CPU0                    CPU1
+     ----                    ----
+lock(&anon_vma->mutex);
+                             lock(&mm->mmap_sem);
+                             lock(&anon_vma->mutex);
+lock(&mm->mmap_sem);
+
+Instead of using the mmap_sem to keep mm_users constant, take the
+page table spinlock.
+
+Signed-off-by: Anton Blanchard <anton@samba.org>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/powerpc/mm/mmu_context_hash64.c |   12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+--- a/arch/powerpc/mm/mmu_context_hash64.c
++++ b/arch/powerpc/mm/mmu_context_hash64.c
+@@ -136,8 +136,8 @@ int use_cop(unsigned long acop, struct m
+       if (!mm || !acop)
+               return -EINVAL;
+-      /* We need to make sure mm_users doesn't change */
+-      down_read(&mm->mmap_sem);
++      /* The page_table_lock ensures mm_users won't change under us */
++      spin_lock(&mm->page_table_lock);
+       spin_lock(mm->context.cop_lockp);
+       if (mm->context.cop_pid == COP_PID_NONE) {
+@@ -164,7 +164,7 @@ int use_cop(unsigned long acop, struct m
+ out:
+       spin_unlock(mm->context.cop_lockp);
+-      up_read(&mm->mmap_sem);
++      spin_unlock(&mm->page_table_lock);
+       return ret;
+ }
+@@ -185,8 +185,8 @@ void drop_cop(unsigned long acop, struct
+       if (WARN_ON_ONCE(!mm))
+               return;
+-      /* We need to make sure mm_users doesn't change */
+-      down_read(&mm->mmap_sem);
++      /* The page_table_lock ensures mm_users won't change under us */
++      spin_lock(&mm->page_table_lock);
+       spin_lock(mm->context.cop_lockp);
+       mm->context.acop &= ~acop;
+@@ -213,7 +213,7 @@ void drop_cop(unsigned long acop, struct
+       }
+       spin_unlock(mm->context.cop_lockp);
+-      up_read(&mm->mmap_sem);
++      spin_unlock(&mm->page_table_lock);
+ }
+ EXPORT_SYMBOL_GPL(drop_cop);
diff --git a/queue-3.0/powerpc-fix-oops-when-echoing-bad-values-to-sys-devices-system-memory-probe.patch b/queue-3.0/powerpc-fix-oops-when-echoing-bad-values-to-sys-devices-system-memory-probe.patch
new file mode 100644 (file)
index 0000000..973e7e5
--- /dev/null
@@ -0,0 +1,86 @@
+From a11940978bd598e65996b4f807cf4904793f7025 Mon Sep 17 00:00:00 2001
+From: Anton Blanchard <anton@samba.org>
+Date: Wed, 10 Aug 2011 20:44:24 +0000
+Subject: powerpc: Fix oops when echoing bad values to /sys/devices/system/memory/probe
+
+From: Anton Blanchard <anton@samba.org>
+
+commit a11940978bd598e65996b4f807cf4904793f7025 upstream.
+
+If we echo an address the hypervisor doesn't like to
+/sys/devices/system/memory/probe we oops the box:
+
+# echo 0x10000000000 > /sys/devices/system/memory/probe
+
+kernel BUG at arch/powerpc/mm/hash_utils_64.c:541!
+
+The backtrace is:
+
+create_section_mapping
+arch_add_memory
+add_memory
+memory_probe_store
+sysdev_class_store
+sysfs_write_file
+vfs_write
+SyS_write
+
+In create_section_mapping we BUG if htab_bolt_mapping returned
+an error. A better approach is to return an error which will
+propagate back to userspace.
+
+Rerunning the test with this patch applied:
+
+# echo 0x10000000000 > /sys/devices/system/memory/probe
+-bash: echo: write error: Invalid argument
+
+Signed-off-by: Anton Blanchard <anton@samba.org>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/powerpc/include/asm/sparsemem.h |    2 +-
+ arch/powerpc/mm/hash_utils_64.c      |    6 +++---
+ arch/powerpc/mm/mem.c                |    3 ++-
+ 3 files changed, 6 insertions(+), 5 deletions(-)
+
+--- a/arch/powerpc/include/asm/sparsemem.h
++++ b/arch/powerpc/include/asm/sparsemem.h
+@@ -16,7 +16,7 @@
+ #endif /* CONFIG_SPARSEMEM */
+ #ifdef CONFIG_MEMORY_HOTPLUG
+-extern void create_section_mapping(unsigned long start, unsigned long end);
++extern int create_section_mapping(unsigned long start, unsigned long end);
+ extern int remove_section_mapping(unsigned long start, unsigned long end);
+ #ifdef CONFIG_NUMA
+ extern int hot_add_scn_to_nid(unsigned long scn_addr);
+--- a/arch/powerpc/mm/hash_utils_64.c
++++ b/arch/powerpc/mm/hash_utils_64.c
+@@ -534,11 +534,11 @@ static unsigned long __init htab_get_tab
+ }
+ #ifdef CONFIG_MEMORY_HOTPLUG
+-void create_section_mapping(unsigned long start, unsigned long end)
++int create_section_mapping(unsigned long start, unsigned long end)
+ {
+-      BUG_ON(htab_bolt_mapping(start, end, __pa(start),
++      return htab_bolt_mapping(start, end, __pa(start),
+                                pgprot_val(PAGE_KERNEL), mmu_linear_psize,
+-                               mmu_kernel_ssize));
++                               mmu_kernel_ssize);
+ }
+ int remove_section_mapping(unsigned long start, unsigned long end)
+--- a/arch/powerpc/mm/mem.c
++++ b/arch/powerpc/mm/mem.c
+@@ -123,7 +123,8 @@ int arch_add_memory(int nid, u64 start,
+       pgdata = NODE_DATA(nid);
+       start = (unsigned long)__va(start);
+-      create_section_mapping(start, start + size);
++      if (create_section_mapping(start, start + size))
++              return -EINVAL;
+       /* this should work for most non-highmem platforms */
+       zone = pgdata->node_zones;
diff --git a/queue-3.0/powerpc-numa-remove-double-of_node_put-in-hot_add_node_scn_to_nid.patch b/queue-3.0/powerpc-numa-remove-double-of_node_put-in-hot_add_node_scn_to_nid.patch
new file mode 100644 (file)
index 0000000..2a6145a
--- /dev/null
@@ -0,0 +1,53 @@
+From 6083184269fd723affca4f6340e491950267622a Mon Sep 17 00:00:00 2001
+From: Anton Blanchard <anton@samba.org>
+Date: Wed, 10 Aug 2011 20:44:21 +0000
+Subject: powerpc/numa: Remove double of_node_put in hot_add_node_scn_to_nid
+
+From: Anton Blanchard <anton@samba.org>
+
+commit 6083184269fd723affca4f6340e491950267622a upstream.
+
+During memory hotplug testing, I got the following warning:
+
+ERROR: Bad of_node_put() on /memory@0
+
+of_node_release
+kref_put
+of_node_put
+of_find_node_by_type
+hot_add_node_scn_to_nid
+hot_add_scn_to_nid
+memory_add_physaddr_to_nid
+...
+
+of_find_node_by_type() loop does the of_node_put for us so we only
+need the handle the case where we terminate the loop early.
+
+As suggested by Stephen Rothwell we can do the of_node_put
+unconditionally outside of the loop since of_node_put handles a
+NULL argument fine.
+
+Signed-off-by: Anton Blanchard <anton@samba.org>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/powerpc/mm/numa.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/arch/powerpc/mm/numa.c
++++ b/arch/powerpc/mm/numa.c
+@@ -1214,11 +1214,12 @@ int hot_add_node_scn_to_nid(unsigned lon
+                       break;
+               }
+-              of_node_put(memory);
+               if (nid >= 0)
+                       break;
+       }
++      of_node_put(memory);
++
+       return nid;
+ }
diff --git a/queue-3.0/powerpc-pseries-avoid-spurious-error-during-hotplug-cpu-add.patch b/queue-3.0/powerpc-pseries-avoid-spurious-error-during-hotplug-cpu-add.patch
new file mode 100644 (file)
index 0000000..7f34882
--- /dev/null
@@ -0,0 +1,44 @@
+From 9c740025c51a26ab00192cfc464064d4ccbfe3fc Mon Sep 17 00:00:00 2001
+From: Anton Blanchard <anton@samba.org>
+Date: Sun, 14 Aug 2011 14:30:30 +0000
+Subject: powerpc/pseries: Avoid spurious error during hotplug CPU add
+
+From: Anton Blanchard <anton@samba.org>
+
+commit 9c740025c51a26ab00192cfc464064d4ccbfe3fc upstream.
+
+During hotplug CPU add we get the following error:
+
+Unexpected Error (0) returned from configure-connector
+
+ibm,configure-connector returns 0 for configuration complete, so
+catch this and avoid the error.
+
+Signed-off-by: Anton Blanchard <anton@samba.org>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/powerpc/platforms/pseries/dlpar.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/arch/powerpc/platforms/pseries/dlpar.c
++++ b/arch/powerpc/platforms/pseries/dlpar.c
+@@ -112,6 +112,7 @@ void dlpar_free_cc_nodes(struct device_n
+       dlpar_free_one_cc_node(dn);
+ }
++#define COMPLETE      0
+ #define NEXT_SIBLING    1
+ #define NEXT_CHILD      2
+ #define NEXT_PROPERTY   3
+@@ -158,6 +159,9 @@ struct device_node *dlpar_configure_conn
+               spin_unlock(&rtas_data_buf_lock);
+               switch (rc) {
++              case COMPLETE:
++                      break;
++
+               case NEXT_SIBLING:
+                       dn = dlpar_parse_cc_node(ccwa);
+                       if (!dn)
index 51ddde80022176532f1995547175c0f3cc67f5d2..095f4830a10b104a62e9e5be8307ca012b621773 100644 (file)
@@ -227,3 +227,15 @@ xen-blkback-report-vbd_wsect-wr_sect-properly.patch
 vfs-fix-statfs-automounter-semantics-regression.patch
 hpsa-add-small-delay-when-using-pci-power-management-to-reset-for-kump.patch
 vfs-we-need-to-set-lookup_jumped-on-mountpoint-crossing.patch
+powerpc-numa-remove-double-of_node_put-in-hot_add_node_scn_to_nid.patch
+powerpc-fix-oops-when-echoing-bad-values-to-sys-devices-system-memory-probe.patch
+powerpc-pseries-avoid-spurious-error-during-hotplug-cpu-add.patch
+powerpc-eeh-fix-proc-ppc64-eeh-creation.patch
+powerpc-fix-deadlock-in-icswx-code.patch
+acpi-atomicio-convert-width-in-bits-to-bytes-in-__acpi_ioremap_fast.patch
+netlink-validate-nla_msecs-length.patch
+ath9k_hw-update-ar9485-initvals-to-fix-system-hang-issue.patch
+mac80211-fix-remain_off_channel-regression.patch
+mac80211-config-hw-when-going-back-on-channel.patch
+mac80211-disable-powersave-for-broken-aps.patch
+mtd-mtdchar-add-missing-initializer-on-raw-write.patch