]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.15-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 7 Jul 2014 20:16:43 +0000 (13:16 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 7 Jul 2014 20:16:43 +0000 (13:16 -0700)
added patches:
arm-mvebu-fix-the-improper-use-of-the-compatible-string-armada38x-using-a-wildcard.patch
arm-omap2-fix-parser-bug-in-platform-muxing-code.patch
arm64-bug-fix-in-stack-alignment-exception.patch
arm64-mm-make-icache-synchronisation-logic-huge-page-aware.patch
b43-fix-frequency-reported-on-g-phy-with-new-firmware.patch
cifs-fix-mount-failure-with-broken-pathnames-when-smb3-mount-with-mapchars-option.patch
fs-cifs-fix-regression-in-cifs_create_mf_symlink.patch
hugetlb-fix-copy_hugetlb_page_range-to-handle-migration-hwpoisoned-entry.patch
ia64-arch-ia64-include-uapi-asm-fcntl.h-needs-personality.h.patch
iommu-vt-d-fix-bug-in-handling-multiple-rmrrs-for-the-same-pci-device.patch
iwlwifi-pcie-try-to-get-ownership-several-times.patch
mm-nommu-per-thread-vma-cache-fix.patch
mm-pcp-allow-restoring-percpu_pagelist_fraction-default.patch
net-allwinner-emac-add-missing-free_irq.patch
regulator-tps65218-add-the-missing-of_node-assignment-in-probe.patch
regulator-tps65218-correct-the-the-config-register-for-ldo1.patch

17 files changed:
queue-3.15/arm-mvebu-fix-the-improper-use-of-the-compatible-string-armada38x-using-a-wildcard.patch [new file with mode: 0644]
queue-3.15/arm-omap2-fix-parser-bug-in-platform-muxing-code.patch [new file with mode: 0644]
queue-3.15/arm64-bug-fix-in-stack-alignment-exception.patch [new file with mode: 0644]
queue-3.15/arm64-mm-make-icache-synchronisation-logic-huge-page-aware.patch [new file with mode: 0644]
queue-3.15/b43-fix-frequency-reported-on-g-phy-with-new-firmware.patch [new file with mode: 0644]
queue-3.15/cifs-fix-mount-failure-with-broken-pathnames-when-smb3-mount-with-mapchars-option.patch [new file with mode: 0644]
queue-3.15/fs-cifs-fix-regression-in-cifs_create_mf_symlink.patch [new file with mode: 0644]
queue-3.15/hugetlb-fix-copy_hugetlb_page_range-to-handle-migration-hwpoisoned-entry.patch [new file with mode: 0644]
queue-3.15/ia64-arch-ia64-include-uapi-asm-fcntl.h-needs-personality.h.patch [new file with mode: 0644]
queue-3.15/iommu-vt-d-fix-bug-in-handling-multiple-rmrrs-for-the-same-pci-device.patch [new file with mode: 0644]
queue-3.15/iwlwifi-pcie-try-to-get-ownership-several-times.patch [new file with mode: 0644]
queue-3.15/mm-nommu-per-thread-vma-cache-fix.patch [new file with mode: 0644]
queue-3.15/mm-pcp-allow-restoring-percpu_pagelist_fraction-default.patch [new file with mode: 0644]
queue-3.15/net-allwinner-emac-add-missing-free_irq.patch [new file with mode: 0644]
queue-3.15/regulator-tps65218-add-the-missing-of_node-assignment-in-probe.patch [new file with mode: 0644]
queue-3.15/regulator-tps65218-correct-the-the-config-register-for-ldo1.patch [new file with mode: 0644]
queue-3.15/series

diff --git a/queue-3.15/arm-mvebu-fix-the-improper-use-of-the-compatible-string-armada38x-using-a-wildcard.patch b/queue-3.15/arm-mvebu-fix-the-improper-use-of-the-compatible-string-armada38x-using-a-wildcard.patch
new file mode 100644 (file)
index 0000000..139454c
--- /dev/null
@@ -0,0 +1,106 @@
+From 8dbdb8e704db34085f5978c335c10256b0fb9629 Mon Sep 17 00:00:00 2001
+From: Gregory CLEMENT <gregory.clement@free-electrons.com>
+Date: Mon, 23 Jun 2014 16:16:51 +0200
+Subject: ARM: mvebu: Fix the improper use of the compatible string armada38x using a wildcard
+
+From: Gregory CLEMENT <gregory.clement@free-electrons.com>
+
+commit 8dbdb8e704db34085f5978c335c10256b0fb9629 upstream.
+
+Wildcards in compatible strings should be avoid. "marvell,armada38x"
+was recently introduced but was not yet used.
+
+The armada 385 SoC is a superset of the armada 380 SoC (with more CPUs
+and more PCIe slots). So this patch replaces the use of
+"marvell,armada38x" by the "marvell,armada380" string.
+
+Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
+Link: https://lkml.kernel.org/r/1403533011-21339-1-git-send-email-gregory.clement@free-electrons.com
+Acked-by: Andrew Lunn <andrew@lunn.ch>
+Signed-off-by: Jason Cooper <jason@lakedaemon.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ Documentation/devicetree/bindings/arm/armada-38x.txt |   14 ++++++++++++--
+ arch/arm/boot/dts/armada-380.dtsi                    |    2 +-
+ arch/arm/boot/dts/armada-385-db.dts                  |    2 +-
+ arch/arm/boot/dts/armada-385-rd.dts                  |    2 +-
+ arch/arm/boot/dts/armada-385.dtsi                    |    2 +-
+ arch/arm/boot/dts/armada-38x.dtsi                    |    2 +-
+ 6 files changed, 17 insertions(+), 7 deletions(-)
+
+--- a/Documentation/devicetree/bindings/arm/armada-38x.txt
++++ b/Documentation/devicetree/bindings/arm/armada-38x.txt
+@@ -6,5 +6,15 @@ following property:
+ Required root node property:
+- - compatible: must contain either "marvell,armada380" or
+-   "marvell,armada385" depending on the variant of the SoC being used.
++ - compatible: must contain "marvell,armada380"
++
++In addition, boards using the Marvell Armada 385 SoC shall have the
++following property before the previous one:
++
++Required root node property:
++
++compatible: must contain "marvell,armada385"
++
++Example:
++
++compatible = "marvell,a385-rd", "marvell,armada385", "marvell,armada380";
+--- a/arch/arm/boot/dts/armada-380.dtsi
++++ b/arch/arm/boot/dts/armada-380.dtsi
+@@ -16,7 +16,7 @@
+ / {
+       model = "Marvell Armada 380 family SoC";
+-      compatible = "marvell,armada380", "marvell,armada38x";
++      compatible = "marvell,armada380";
+       cpus {
+               #address-cells = <1>;
+--- a/arch/arm/boot/dts/armada-385-db.dts
++++ b/arch/arm/boot/dts/armada-385-db.dts
+@@ -16,7 +16,7 @@
+ / {
+       model = "Marvell Armada 385 Development Board";
+-      compatible = "marvell,a385-db", "marvell,armada385", "marvell,armada38x";
++      compatible = "marvell,a385-db", "marvell,armada385", "marvell,armada380";
+       chosen {
+               bootargs = "console=ttyS0,115200 earlyprintk";
+--- a/arch/arm/boot/dts/armada-385-rd.dts
++++ b/arch/arm/boot/dts/armada-385-rd.dts
+@@ -17,7 +17,7 @@
+ / {
+       model = "Marvell Armada 385 Reference Design";
+-      compatible = "marvell,a385-rd", "marvell,armada385", "marvell,armada38x";
++      compatible = "marvell,a385-rd", "marvell,armada385", "marvell,armada380";
+       chosen {
+               bootargs = "console=ttyS0,115200 earlyprintk";
+--- a/arch/arm/boot/dts/armada-385.dtsi
++++ b/arch/arm/boot/dts/armada-385.dtsi
+@@ -16,7 +16,7 @@
+ / {
+       model = "Marvell Armada 385 family SoC";
+-      compatible = "marvell,armada385", "marvell,armada38x";
++      compatible = "marvell,armada385", "marvell,armada380";
+       cpus {
+               #address-cells = <1>;
+--- a/arch/arm/boot/dts/armada-38x.dtsi
++++ b/arch/arm/boot/dts/armada-38x.dtsi
+@@ -20,7 +20,7 @@
+ / {
+       model = "Marvell Armada 38x family SoC";
+-      compatible = "marvell,armada38x";
++      compatible = "marvell,armada380";
+       aliases {
+               gpio0 = &gpio0;
diff --git a/queue-3.15/arm-omap2-fix-parser-bug-in-platform-muxing-code.patch b/queue-3.15/arm-omap2-fix-parser-bug-in-platform-muxing-code.patch
new file mode 100644 (file)
index 0000000..ca0ef00
--- /dev/null
@@ -0,0 +1,60 @@
+From c021f241f4fab2bb4fc4120a38a828a03dd3f970 Mon Sep 17 00:00:00 2001
+From: "David R. Piegdon" <lkml@p23q.org>
+Date: Mon, 16 Jun 2014 23:42:51 +0000
+Subject: ARM: OMAP2+: Fix parser-bug in platform muxing code
+
+From: "David R. Piegdon" <lkml@p23q.org>
+
+commit c021f241f4fab2bb4fc4120a38a828a03dd3f970 upstream.
+
+Fix a parser-bug in the omap2 muxing code where muxtable-entries will be
+wrongly selected if the requested muxname is a *prefix* of their
+m0-entry and they have a matching mN-entry. Fix by additionally checking
+that the length of the m0_entry is equal.
+
+For example muxing of "dss_data2.dss_data2" on omap32xx will fail
+because the prefix "dss_data2" will match the mux-entries "dss_data2" as
+well as "dss_data20", with the suffix "dss_data2" matching m0 (for
+dss_data2) and m4 (for dss_data20). Thus both are recognized as signal
+path candidates:
+
+Relevant muxentries from mux34xx.c:
+        _OMAP3_MUXENTRY(DSS_DATA20, 90,
+                "dss_data20", NULL, "mcspi3_somi", "dss_data2",
+                "gpio_90", NULL, NULL, "safe_mode"),
+        _OMAP3_MUXENTRY(DSS_DATA2, 72,
+                "dss_data2", NULL, NULL, NULL,
+                "gpio_72", NULL, NULL, "safe_mode"),
+
+This will result in a failure to mux the pin at all:
+
+ _omap_mux_get_by_name: Multiple signal paths (2) for dss_data2.dss_data2
+
+Patch should apply to linus' latest master down to rather old linux-2.6
+trees.
+
+Signed-off-by: David R. Piegdon <lkml@p23q.org>
+Cc: stable@vger.kernel.org
+[tony@atomide.com: updated description to include full description]
+Signed-off-by: Tony Lindgren <tony@atomide.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/mach-omap2/mux.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/arch/arm/mach-omap2/mux.c
++++ b/arch/arm/mach-omap2/mux.c
+@@ -183,8 +183,10 @@ static int __init _omap_mux_get_by_name(
+               m0_entry = mux->muxnames[0];
+               /* First check for full name in mode0.muxmode format */
+-              if (mode0_len && strncmp(muxname, m0_entry, mode0_len))
+-                      continue;
++              if (mode0_len)
++                      if (strncmp(muxname, m0_entry, mode0_len) ||
++                          (strlen(m0_entry) != mode0_len))
++                              continue;
+               /* Then check for muxmode only */
+               for (i = 0; i < OMAP_MUX_NR_MODES; i++) {
diff --git a/queue-3.15/arm64-bug-fix-in-stack-alignment-exception.patch b/queue-3.15/arm64-bug-fix-in-stack-alignment-exception.patch
new file mode 100644 (file)
index 0000000..680eacb
--- /dev/null
@@ -0,0 +1,35 @@
+From 3906c2b53cd23c2ae03e6ce41432c8e7f0a3cbbb Mon Sep 17 00:00:00 2001
+From: ChiaHao <andy.jhshiu@gmail.com>
+Date: Thu, 12 Jun 2014 15:32:33 +0100
+Subject: arm64: Bug fix in stack alignment exception
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: ChiaHao <andy.jhshiu@gmail.com>
+
+commit 3906c2b53cd23c2ae03e6ce41432c8e7f0a3cbbb upstream.
+
+The value of ESR has been stored into x1, and should be directly pass to
+do_sp_pc_abort function, "MOV x1, x25" is an extra operation and do_sp_pc_abort
+will get the wrong value of ESR.
+
+Signed-off-by: ChiaHao <andy.jhshiu@gmail.com>
+Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm64/kernel/entry.S |    1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/arch/arm64/kernel/entry.S
++++ b/arch/arm64/kernel/entry.S
+@@ -275,7 +275,6 @@ el1_sp_pc:
+        * Stack or PC alignment exception handling
+        */
+       mrs     x0, far_el1
+-      mov     x1, x25
+       mov     x2, sp
+       b       do_sp_pc_abort
+ el1_undef:
diff --git a/queue-3.15/arm64-mm-make-icache-synchronisation-logic-huge-page-aware.patch b/queue-3.15/arm64-mm-make-icache-synchronisation-logic-huge-page-aware.patch
new file mode 100644 (file)
index 0000000..88a0e26
--- /dev/null
@@ -0,0 +1,39 @@
+From 923b8f5044da753e4985ab15c1374ced2cdf616c Mon Sep 17 00:00:00 2001
+From: Steve Capper <steve.capper@linaro.org>
+Date: Wed, 2 Jul 2014 11:46:23 +0100
+Subject: arm64: mm: Make icache synchronisation logic huge page aware
+
+From: Steve Capper <steve.capper@linaro.org>
+
+commit 923b8f5044da753e4985ab15c1374ced2cdf616c upstream.
+
+The __sync_icache_dcache routine will only flush the dcache for the
+first page of a compound page, potentially leading to stale icache
+data residing further on in a hugetlb page.
+
+This patch addresses this issue by taking into consideration the
+order of the page when flushing the dcache.
+
+Reported-by: Mark Brown <broonie@linaro.org>
+Tested-by: Mark Brown <broonie@linaro.org>
+Signed-off-by: Steve Capper <steve.capper@linaro.org>
+Acked-by: Will Deacon <will.deacon@arm.com>
+Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm64/mm/flush.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/arch/arm64/mm/flush.c
++++ b/arch/arm64/mm/flush.c
+@@ -79,7 +79,8 @@ void __sync_icache_dcache(pte_t pte, uns
+               return;
+       if (!test_and_set_bit(PG_dcache_clean, &page->flags)) {
+-              __flush_dcache_area(page_address(page), PAGE_SIZE);
++              __flush_dcache_area(page_address(page),
++                              PAGE_SIZE << compound_order(page));
+               __flush_icache_all();
+       } else if (icache_is_aivivt()) {
+               __flush_icache_all();
diff --git a/queue-3.15/b43-fix-frequency-reported-on-g-phy-with-new-firmware.patch b/queue-3.15/b43-fix-frequency-reported-on-g-phy-with-new-firmware.patch
new file mode 100644 (file)
index 0000000..796e509
--- /dev/null
@@ -0,0 +1,54 @@
+From 2fc68eb122c7ea6cd5be1fe7d6650c0beb2f4f40 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
+Date: Thu, 12 Jun 2014 22:28:22 +0200
+Subject: b43: fix frequency reported on G-PHY with /new/ firmware
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
+
+commit 2fc68eb122c7ea6cd5be1fe7d6650c0beb2f4f40 upstream.
+
+Support for firmware rev 508+ was added years ago, but we never noticed
+it reports channel in a different way for G-PHY devices. Instead of
+offset from 2400 MHz it simply passes channel id (AKA hw_value).
+
+So far it was (most probably) affecting monitor mode users only, but
+the following recent commit made it noticeable for quite everybody:
+
+commit 3afc2167f60a327a2c1e1e2600ef209a3c2b75b7
+Author: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Date:   Tue Mar 4 16:50:13 2014 +0200
+
+    cfg80211/mac80211: ignore signal if the frame was heard on wrong channel
+
+Reported-by: Aaro Koskinen <aaro.koskinen@iki.fi>
+Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
+Tested-by: Aaro Koskinen <aaro.koskinen@iki.fi>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/b43/xmit.c |   10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/wireless/b43/xmit.c
++++ b/drivers/net/wireless/b43/xmit.c
+@@ -811,9 +811,13 @@ void b43_rx(struct b43_wldev *dev, struc
+               break;
+       case B43_PHYTYPE_G:
+               status.band = IEEE80211_BAND_2GHZ;
+-              /* chanid is the radio channel cookie value as used
+-               * to tune the radio. */
+-              status.freq = chanid + 2400;
++              /* Somewhere between 478.104 and 508.1084 firmware for G-PHY
++               * has been modified to be compatible with N-PHY and others.
++               */
++              if (dev->fw.rev >= 508)
++                      status.freq = ieee80211_channel_to_frequency(chanid, status.band);
++              else
++                      status.freq = chanid + 2400;
+               break;
+       case B43_PHYTYPE_N:
+       case B43_PHYTYPE_LP:
diff --git a/queue-3.15/cifs-fix-mount-failure-with-broken-pathnames-when-smb3-mount-with-mapchars-option.patch b/queue-3.15/cifs-fix-mount-failure-with-broken-pathnames-when-smb3-mount-with-mapchars-option.patch
new file mode 100644 (file)
index 0000000..a74e6e4
--- /dev/null
@@ -0,0 +1,58 @@
+From ce36d9ab3bab06b7b5522f5c8b68fac231b76ffb Mon Sep 17 00:00:00 2001
+From: Steve French <smfrench@gmail.com>
+Date: Sun, 22 Jun 2014 20:38:49 -0500
+Subject: CIFS: fix mount failure with broken pathnames when smb3 mount with mapchars option
+
+From: Steve French <smfrench@gmail.com>
+
+commit ce36d9ab3bab06b7b5522f5c8b68fac231b76ffb upstream.
+
+When we SMB3 mounted with mapchars (to allow reserved characters : \ / > < * ?
+via the Unicode Windows to POSIX remap range) empty paths
+(eg when we open "" to query the root of the SMB3 directory on mount) were not
+null terminated so we sent garbarge as a path name on empty paths which caused
+SMB2/SMB2.1/SMB3 mounts to fail when mapchars was specified.  mapchars is
+particularly important since Unix Extensions for SMB3 are not supported (yet)
+
+Signed-off-by: Steve French <smfrench@gmail.com>
+Reviewed-by: David Disseldorp <ddiss@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/cifs/cifs_unicode.c |    7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/fs/cifs/cifs_unicode.c
++++ b/fs/cifs/cifs_unicode.c
+@@ -290,7 +290,8 @@ int
+ cifsConvertToUTF16(__le16 *target, const char *source, int srclen,
+                const struct nls_table *cp, int mapChars)
+ {
+-      int i, j, charlen;
++      int i, charlen;
++      int j = 0;
+       char src_char;
+       __le16 dst_char;
+       wchar_t tmp;
+@@ -298,12 +299,11 @@ cifsConvertToUTF16(__le16 *target, const
+       if (!mapChars)
+               return cifs_strtoUTF16(target, source, PATH_MAX, cp);
+-      for (i = 0, j = 0; i < srclen; j++) {
++      for (i = 0; i < srclen; j++) {
+               src_char = source[i];
+               charlen = 1;
+               switch (src_char) {
+               case 0:
+-                      put_unaligned(0, &target[j]);
+                       goto ctoUTF16_out;
+               case ':':
+                       dst_char = cpu_to_le16(UNI_COLON);
+@@ -350,6 +350,7 @@ cifsConvertToUTF16(__le16 *target, const
+       }
+ ctoUTF16_out:
++      put_unaligned(0, &target[j]); /* Null terminate target unicode string */
+       return j;
+ }
diff --git a/queue-3.15/fs-cifs-fix-regression-in-cifs_create_mf_symlink.patch b/queue-3.15/fs-cifs-fix-regression-in-cifs_create_mf_symlink.patch
new file mode 100644 (file)
index 0000000..d25243d
--- /dev/null
@@ -0,0 +1,39 @@
+From a1d0b84c308d7fdfb67eb76498116a6c2fdda507 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B6rn=20Baumbach?= <bb@sernet.de>
+Date: Tue, 10 Jun 2014 12:03:26 +0200
+Subject: fs/cifs: fix regression in cifs_create_mf_symlink()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: =?UTF-8?q?Bj=C3=B6rn=20Baumbach?= <bb@sernet.de>
+
+commit a1d0b84c308d7fdfb67eb76498116a6c2fdda507 upstream.
+
+commit d81b8a40e2ece0a9ab57b1fe1798e291e75bf8fc
+("CIFS: Cleanup cifs open codepath")
+changed disposition to FILE_OPEN.
+
+Signed-off-by: Björn Baumbach <bb@sernet.de>
+Signed-off-by: Stefan Metzmacher <metze@samba.org>
+Reviewed-by: Stefan Metzmacher <metze@samba.org>
+Cc: Pavel Shilovsky <piastry@etersoft.ru>
+Cc: Steve French <sfrench@samba.org>
+Signed-off-by: Steve French <smfrench@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/cifs/link.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/cifs/link.c
++++ b/fs/cifs/link.c
+@@ -374,7 +374,7 @@ cifs_create_mf_symlink(unsigned int xid,
+       oparms.cifs_sb = cifs_sb;
+       oparms.desired_access = GENERIC_WRITE;
+       oparms.create_options = create_options;
+-      oparms.disposition = FILE_OPEN;
++      oparms.disposition = FILE_CREATE;
+       oparms.path = path;
+       oparms.fid = &fid;
+       oparms.reconnect = false;
diff --git a/queue-3.15/hugetlb-fix-copy_hugetlb_page_range-to-handle-migration-hwpoisoned-entry.patch b/queue-3.15/hugetlb-fix-copy_hugetlb_page_range-to-handle-migration-hwpoisoned-entry.patch
new file mode 100644 (file)
index 0000000..5f60651
--- /dev/null
@@ -0,0 +1,123 @@
+From 4a705fef986231a3e7a6b1a6d3c37025f021f49f Mon Sep 17 00:00:00 2001
+From: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
+Date: Mon, 23 Jun 2014 13:22:03 -0700
+Subject: hugetlb: fix copy_hugetlb_page_range() to handle migration/hwpoisoned entry
+
+From: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
+
+commit 4a705fef986231a3e7a6b1a6d3c37025f021f49f upstream.
+
+There's a race between fork() and hugepage migration, as a result we try
+to "dereference" a swap entry as a normal pte, causing kernel panic.
+The cause of the problem is that copy_hugetlb_page_range() can't handle
+"swap entry" family (migration entry and hwpoisoned entry) so let's fix
+it.
+
+[akpm@linux-foundation.org: coding-style fixes]
+Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
+Acked-by: Hugh Dickins <hughd@google.com>
+Cc: Christoph Lameter <cl@linux.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ mm/hugetlb.c |   71 +++++++++++++++++++++++++++++++++++------------------------
+ 1 file changed, 43 insertions(+), 28 deletions(-)
+
+--- a/mm/hugetlb.c
++++ b/mm/hugetlb.c
+@@ -2377,6 +2377,31 @@ static void set_huge_ptep_writable(struc
+               update_mmu_cache(vma, address, ptep);
+ }
++static int is_hugetlb_entry_migration(pte_t pte)
++{
++      swp_entry_t swp;
++
++      if (huge_pte_none(pte) || pte_present(pte))
++              return 0;
++      swp = pte_to_swp_entry(pte);
++      if (non_swap_entry(swp) && is_migration_entry(swp))
++              return 1;
++      else
++              return 0;
++}
++
++static int is_hugetlb_entry_hwpoisoned(pte_t pte)
++{
++      swp_entry_t swp;
++
++      if (huge_pte_none(pte) || pte_present(pte))
++              return 0;
++      swp = pte_to_swp_entry(pte);
++      if (non_swap_entry(swp) && is_hwpoison_entry(swp))
++              return 1;
++      else
++              return 0;
++}
+ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src,
+                           struct vm_area_struct *vma)
+@@ -2416,10 +2441,26 @@ int copy_hugetlb_page_range(struct mm_st
+               dst_ptl = huge_pte_lock(h, dst, dst_pte);
+               src_ptl = huge_pte_lockptr(h, src, src_pte);
+               spin_lock_nested(src_ptl, SINGLE_DEPTH_NESTING);
+-              if (!huge_pte_none(huge_ptep_get(src_pte))) {
++              entry = huge_ptep_get(src_pte);
++              if (huge_pte_none(entry)) { /* skip none entry */
++                      ;
++              } else if (unlikely(is_hugetlb_entry_migration(entry) ||
++                                  is_hugetlb_entry_hwpoisoned(entry))) {
++                      swp_entry_t swp_entry = pte_to_swp_entry(entry);
++
++                      if (is_write_migration_entry(swp_entry) && cow) {
++                              /*
++                               * COW mappings require pages in both
++                               * parent and child to be set to read.
++                               */
++                              make_migration_entry_read(&swp_entry);
++                              entry = swp_entry_to_pte(swp_entry);
++                              set_huge_pte_at(src, addr, src_pte, entry);
++                      }
++                      set_huge_pte_at(dst, addr, dst_pte, entry);
++              } else {
+                       if (cow)
+                               huge_ptep_set_wrprotect(src, addr, src_pte);
+-                      entry = huge_ptep_get(src_pte);
+                       ptepage = pte_page(entry);
+                       get_page(ptepage);
+                       page_dup_rmap(ptepage);
+@@ -2435,32 +2476,6 @@ int copy_hugetlb_page_range(struct mm_st
+       return ret;
+ }
+-static int is_hugetlb_entry_migration(pte_t pte)
+-{
+-      swp_entry_t swp;
+-
+-      if (huge_pte_none(pte) || pte_present(pte))
+-              return 0;
+-      swp = pte_to_swp_entry(pte);
+-      if (non_swap_entry(swp) && is_migration_entry(swp))
+-              return 1;
+-      else
+-              return 0;
+-}
+-
+-static int is_hugetlb_entry_hwpoisoned(pte_t pte)
+-{
+-      swp_entry_t swp;
+-
+-      if (huge_pte_none(pte) || pte_present(pte))
+-              return 0;
+-      swp = pte_to_swp_entry(pte);
+-      if (non_swap_entry(swp) && is_hwpoison_entry(swp))
+-              return 1;
+-      else
+-              return 0;
+-}
+-
+ void __unmap_hugepage_range(struct mmu_gather *tlb, struct vm_area_struct *vma,
+                           unsigned long start, unsigned long end,
+                           struct page *ref_page)
diff --git a/queue-3.15/ia64-arch-ia64-include-uapi-asm-fcntl.h-needs-personality.h.patch b/queue-3.15/ia64-arch-ia64-include-uapi-asm-fcntl.h-needs-personality.h.patch
new file mode 100644 (file)
index 0000000..97bf358
--- /dev/null
@@ -0,0 +1,36 @@
+From f9af420fc8208d3add2fe3198dc5d8215f5a81ba Mon Sep 17 00:00:00 2001
+From: Andrew Morton <akpm@linux-foundation.org>
+Date: Mon, 23 Jun 2014 13:22:07 -0700
+Subject: ia64: arch/ia64/include/uapi/asm/fcntl.h needs personality.h
+
+From: Andrew Morton <akpm@linux-foundation.org>
+
+commit f9af420fc8208d3add2fe3198dc5d8215f5a81ba upstream.
+
+fs/notify/fanotify/fanotify_user.c: In function 'SYSC_fanotify_init':
+fs/notify/fanotify/fanotify_user.c:726: error: implicit declaration of function 'personality'
+fs/notify/fanotify/fanotify_user.c:726: error: 'PER_LINUX32' undeclared (first use in this function)
+fs/notify/fanotify/fanotify_user.c:726: error: (Each undeclared identifier is reported only once
+fs/notify/fanotify/fanotify_user.c:726: error: for each function it appears in.)
+
+Reported-by: Wu Fengguang <fengguang.wu@intel.com>
+Cc: Will Woods <wwoods@redhat.com>
+Cc: "Luck, Tony" <tony.luck@intel.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/ia64/include/uapi/asm/fcntl.h |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/arch/ia64/include/uapi/asm/fcntl.h
++++ b/arch/ia64/include/uapi/asm/fcntl.h
+@@ -8,6 +8,7 @@
+ #define force_o_largefile()   \
+               (personality(current->personality) != PER_LINUX32)
++#include <linux/personality.h>
+ #include <asm-generic/fcntl.h>
+ #endif /* _ASM_IA64_FCNTL_H */
diff --git a/queue-3.15/iommu-vt-d-fix-bug-in-handling-multiple-rmrrs-for-the-same-pci-device.patch b/queue-3.15/iommu-vt-d-fix-bug-in-handling-multiple-rmrrs-for-the-same-pci-device.patch
new file mode 100644 (file)
index 0000000..be3c831
--- /dev/null
@@ -0,0 +1,46 @@
+From 27e249501ca06a3010519c306206cc402b61b5ab Mon Sep 17 00:00:00 2001
+From: Jiang Liu <jiang.liu@linux.intel.com>
+Date: Fri, 20 Jun 2014 15:08:06 +0800
+Subject: iommu/vt-d: fix bug in handling multiple RMRRs for the same PCI device
+
+From: Jiang Liu <jiang.liu@linux.intel.com>
+
+commit 27e249501ca06a3010519c306206cc402b61b5ab upstream.
+
+Function dmar_iommu_notify_scope_dev() makes a wrong assumption that
+there's one RMRR for each PCI device at most, which causes DMA failure
+on some HP platforms. So enhance dmar_iommu_notify_scope_dev() to
+handle multiple RMRRs for the same PCI device.
+
+Fixbug: https://bugzilla.novell.com/show_bug.cgi?id=879482
+
+Reported-by: Tom Mingarelli <thomas.mingarelli@hp.com>
+Tested-by: Linda Knippers <linda.knippers@hp.com>
+Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
+Signed-off-by: Joerg Roedel <jroedel@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/iommu/intel-iommu.c |    9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+--- a/drivers/iommu/intel-iommu.c
++++ b/drivers/iommu/intel-iommu.c
+@@ -3799,14 +3799,11 @@ int dmar_iommu_notify_scope_dev(struct d
+                               ((void *)rmrr) + rmrr->header.length,
+                               rmrr->segment, rmrru->devices,
+                               rmrru->devices_cnt);
+-                      if (ret > 0)
+-                              break;
+-                      else if(ret < 0)
++                      if(ret < 0)
+                               return ret;
+               } else if (info->event == BUS_NOTIFY_DEL_DEVICE) {
+-                      if (dmar_remove_dev_scope(info, rmrr->segment,
+-                              rmrru->devices, rmrru->devices_cnt))
+-                              break;
++                      dmar_remove_dev_scope(info, rmrr->segment,
++                              rmrru->devices, rmrru->devices_cnt);
+               }
+       }
diff --git a/queue-3.15/iwlwifi-pcie-try-to-get-ownership-several-times.patch b/queue-3.15/iwlwifi-pcie-try-to-get-ownership-several-times.patch
new file mode 100644 (file)
index 0000000..35431b6
--- /dev/null
@@ -0,0 +1,66 @@
+From 501fd9895c1d7d8161ed56698ae2fccb10ef14f5 Mon Sep 17 00:00:00 2001
+From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Date: Thu, 8 May 2014 12:15:22 +0300
+Subject: iwlwifi: pcie: try to get ownership several times
+
+From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+
+commit 501fd9895c1d7d8161ed56698ae2fccb10ef14f5 upstream.
+
+Some races with the hardware can happen when we take
+ownership of the device. Don't give up after the first try.
+
+Reviewed-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/iwlwifi/pcie/trans.c |   30 ++++++++++++++++++------------
+ 1 file changed, 18 insertions(+), 12 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/pcie/trans.c
++++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
+@@ -454,6 +454,7 @@ static int iwl_pcie_prepare_card_hw(stru
+ {
+       int ret;
+       int t = 0;
++      int iter;
+       IWL_DEBUG_INFO(trans, "iwl_trans_prepare_card_hw enter\n");
+@@ -462,18 +463,23 @@ static int iwl_pcie_prepare_card_hw(stru
+       if (ret >= 0)
+               return 0;
+-      /* If HW is not ready, prepare the conditions to check again */
+-      iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG,
+-                  CSR_HW_IF_CONFIG_REG_PREPARE);
+-
+-      do {
+-              ret = iwl_pcie_set_hw_ready(trans);
+-              if (ret >= 0)
+-                      return 0;
+-
+-              usleep_range(200, 1000);
+-              t += 200;
+-      } while (t < 150000);
++      for (iter = 0; iter < 10; iter++) {
++              /* If HW is not ready, prepare the conditions to check again */
++              iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG,
++                          CSR_HW_IF_CONFIG_REG_PREPARE);
++
++              do {
++                      ret = iwl_pcie_set_hw_ready(trans);
++                      if (ret >= 0)
++                              return 0;
++
++                      usleep_range(200, 1000);
++                      t += 200;
++              } while (t < 150000);
++              msleep(25);
++      }
++
++      IWL_DEBUG_INFO(trans, "got NIC after %d iterations\n", iter);
+       return ret;
+ }
diff --git a/queue-3.15/mm-nommu-per-thread-vma-cache-fix.patch b/queue-3.15/mm-nommu-per-thread-vma-cache-fix.patch
new file mode 100644 (file)
index 0000000..adbe844
--- /dev/null
@@ -0,0 +1,145 @@
+From e020d5bd8a730757b565b18d620240f71c3e21fe Mon Sep 17 00:00:00 2001
+From: Steven Miao <realmz6@gmail.com>
+Date: Mon, 23 Jun 2014 13:22:02 -0700
+Subject: mm: nommu: per-thread vma cache fix
+
+From: Steven Miao <realmz6@gmail.com>
+
+commit e020d5bd8a730757b565b18d620240f71c3e21fe upstream.
+
+mm could be removed from current task struct, using previous vma->vm_mm
+
+It will crash on blackfin after updated to Linux 3.15.  The commit "mm:
+per-thread vma caching" caused the crash.  mm could be removed from
+current task struct before
+
+  mmput()->
+    exit_mmap()->
+      delete_vma_from_mm()
+
+the detailed fault information:
+
+    NULL pointer access
+    Kernel OOPS in progress
+    Deferred Exception context
+    CURRENT PROCESS:
+    COMM=modprobe PID=278  CPU=0
+    invalid mm
+    return address: [0x000531de]; contents of:
+    0x000531b0:  c727  acea  0c42  181d  0000  0000  0000  a0a8
+    0x000531c0:  b090  acaa  0c42  1806  0000  0000  0000  a0e8
+    0x000531d0:  b0d0  e801  0000  05b3  0010  e522  0046 [a090]
+    0x000531e0:  6408  b090  0c00  17cc  3042  e3ff  f37b  2fc8
+
+    CPU: 0 PID: 278 Comm: modprobe Not tainted 3.15.0-ADI-2014R1-pre-00345-gea9f446 #25
+    task: 0572b720 ti: 0569e000 task.ti: 0569e000
+    Compiled for cpu family 0x27fe (Rev 0), but running on:0x0000 (Rev 0)
+    ADSP-BF609-0.0 500(MHz CCLK) 125(MHz SCLK) (mpu off)
+    Linux version 3.15.0-ADI-2014R1-pre-00345-gea9f446 (steven@steven-OptiPlex-390) (gcc version 4.3.5 (ADI-trunk/svn-5962) ) #25 Tue Jun 10 17:47:46 CST 2014
+
+    SEQUENCER STATUS:          Not tainted
+     SEQSTAT: 00000027  IPEND: 8008  IMASK: ffff  SYSCFG: 2806
+      EXCAUSE   : 0x27
+      physical IVG3 asserted : <0xffa00744> { _trap + 0x0 }
+      physical IVG15 asserted : <0xffa00d68> { _evt_system_call + 0x0 }
+      logical irq   6 mapped  : <0xffa003bc> { _bfin_coretmr_interrupt + 0x0 }
+      logical irq   7 mapped  : <0x00008828> { _bfin_fault_routine + 0x0 }
+      logical irq  11 mapped  : <0x00007724> { _l2_ecc_err + 0x0 }
+      logical irq  13 mapped  : <0x00008828> { _bfin_fault_routine + 0x0 }
+      logical irq  39 mapped  : <0x00150788> { _bfin_twi_interrupt_entry + 0x0 }
+      logical irq  40 mapped  : <0x00150788> { _bfin_twi_interrupt_entry + 0x0 }
+     RETE: <0x00000000> /* Maybe null pointer? */
+     RETN: <0x0569fe50> /* kernel dynamic memory (maybe user-space) */
+     RETX: <0x00000480> /* Maybe fixed code section */
+     RETS: <0x00053384> { _exit_mmap + 0x28 }
+     PC  : <0x000531de> { _delete_vma_from_mm + 0x92 }
+    DCPLB_FAULT_ADDR: <0x00000008> /* Maybe null pointer? */
+    ICPLB_FAULT_ADDR: <0x000531de> { _delete_vma_from_mm + 0x92 }
+    PROCESSOR STATE:
+     R0 : 00000004    R1 : 0569e000    R2 : 00bf3db4    R3 : 00000000
+     R4 : 057f9800    R5 : 00000001    R6 : 0569ddd0    R7 : 0572b720
+     P0 : 0572b854    P1 : 00000004    P2 : 00000000    P3 : 0569dda0
+     P4 : 0572b720    P5 : 0566c368    FP : 0569fe5c    SP : 0569fd74
+     LB0: 057f523f    LT0: 057f523e    LC0: 00000000
+     LB1: 0005317c    LT1: 00053172    LC1: 00000002
+     B0 : 00000000    L0 : 00000000    M0 : 0566f5bc    I0 : 00000000
+     B1 : 00000000    L1 : 00000000    M1 : 00000000    I1 : ffffffff
+     B2 : 00000001    L2 : 00000000    M2 : 00000000    I2 : 00000000
+     B3 : 00000000    L3 : 00000000    M3 : 00000000    I3 : 057f8000
+    A0.w: 00000000   A0.x: 00000000   A1.w: 00000000   A1.x: 00000000
+    USP : 056ffcf8  ASTAT: 02003024
+
+    Hardware Trace:
+       0 Target : <0x00003fb8> { _trap_c + 0x0 }
+         Source : <0xffa006d8> { _exception_to_level5 + 0xa0 } JUMP.L
+       1 Target : <0xffa00638> { _exception_to_level5 + 0x0 }
+         Source : <0xffa004f2> { _bfin_return_from_exception + 0x6 } RTX
+       2 Target : <0xffa004ec> { _bfin_return_from_exception + 0x0 }
+         Source : <0xffa00590> { _ex_trap_c + 0x70 } JUMP.S
+       3 Target : <0xffa00520> { _ex_trap_c + 0x0 }
+         Source : <0xffa0076e> { _trap + 0x2a } JUMP (P4)
+       4 Target : <0xffa00744> { _trap + 0x0 }
+          FAULT : <0x000531de> { _delete_vma_from_mm + 0x92 } P0 = W[P2 + 2]
+         Source : <0x000531da> { _delete_vma_from_mm + 0x8e } P2 = [P4 + 0x18]
+       5 Target : <0x000531da> { _delete_vma_from_mm + 0x8e }
+         Source : <0x00053176> { _delete_vma_from_mm + 0x2a } IF CC JUMP pcrel
+       6 Target : <0x0005314c> { _delete_vma_from_mm + 0x0 }
+         Source : <0x00053380> { _exit_mmap + 0x24 } JUMP.L
+       7 Target : <0x00053378> { _exit_mmap + 0x1c }
+         Source : <0x00053394> { _exit_mmap + 0x38 } IF !CC JUMP pcrel (BP)
+       8 Target : <0x00053390> { _exit_mmap + 0x34 }
+         Source : <0xffa020e0> { __cond_resched + 0x20 } RTS
+       9 Target : <0xffa020c0> { __cond_resched + 0x0 }
+         Source : <0x0005338c> { _exit_mmap + 0x30 } JUMP.L
+      10 Target : <0x0005338c> { _exit_mmap + 0x30 }
+         Source : <0x0005333a> { _delete_vma + 0xb2 } RTS
+      11 Target : <0x00053334> { _delete_vma + 0xac }
+         Source : <0x0005507a> { _kmem_cache_free + 0xba } RTS
+      12 Target : <0x00055068> { _kmem_cache_free + 0xa8 }
+         Source : <0x0005505e> { _kmem_cache_free + 0x9e } IF !CC JUMP pcrel (BP)
+      13 Target : <0x00055052> { _kmem_cache_free + 0x92 }
+         Source : <0x0005501a> { _kmem_cache_free + 0x5a } IF CC JUMP pcrel
+      14 Target : <0x00054ff4> { _kmem_cache_free + 0x34 }
+         Source : <0x00054fce> { _kmem_cache_free + 0xe } IF CC JUMP pcrel (BP)
+      15 Target : <0x00054fc0> { _kmem_cache_free + 0x0 }
+         Source : <0x00053330> { _delete_vma + 0xa8 } JUMP.L
+    Kernel Stack
+    Stack info:
+     SP: [0x0569ff24] <0x0569ff24> /* kernel dynamic memory (maybe user-space) */
+     Memory from 0x0569ff20 to 056a0000
+    0569ff20: 00000001 [04e8da5a] 00008000  00000000  00000000  056a0000  04e8da5a  04e8da5a
+    0569ff40: 04eb9eea  ffa00dce  02003025  04ea09c5  057f523f  04ea09c4  057f523e  00000000
+    0569ff60: 00000000  00000000  00000000  00000000  00000000  00000000  00000001  00000000
+    0569ff80: 00000000  00000000  00000000  00000000  00000000  00000000  00000000  00000000
+    0569ffa0: 0566f5bc  057f8000  057f8000  00000001  04ec0170  056ffcf8  056ffd04  057f9800
+    0569ffc0: 04d1d498  057f9800  057f8fe4  057f8ef0  00000001  057f928c  00000001  00000001
+    0569ffe0: 057f9800  00000000  00000008  00000007  00000001  00000001  00000001 <00002806>
+    Return addresses in stack:
+        address : <0x00002806> { _show_cpuinfo + 0x2d2 }
+    Modules linked in:
+    Kernel panic - not syncing: Kernel exception
+    [ end Kernel panic - not syncing: Kernel exception
+
+Signed-off-by: Steven Miao <realmz6@gmail.com>
+Acked-by: Davidlohr Bueso <davidlohr@hp.com>
+Reviewed-by: Rik van Riel <riel@redhat.com>
+Acked-by: David Rientjes <rientjes@google.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ mm/nommu.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/mm/nommu.c
++++ b/mm/nommu.c
+@@ -783,7 +783,7 @@ static void delete_vma_from_mm(struct vm
+       for (i = 0; i < VMACACHE_SIZE; i++) {
+               /* if the vma is cached, invalidate the entire cache */
+               if (curr->vmacache[i] == vma) {
+-                      vmacache_invalidate(curr->mm);
++                      vmacache_invalidate(mm);
+                       break;
+               }
+       }
diff --git a/queue-3.15/mm-pcp-allow-restoring-percpu_pagelist_fraction-default.patch b/queue-3.15/mm-pcp-allow-restoring-percpu_pagelist_fraction-default.patch
new file mode 100644 (file)
index 0000000..dd843d5
--- /dev/null
@@ -0,0 +1,165 @@
+From 7cd2b0a34ab8e4db971920eef8982f985441adfb Mon Sep 17 00:00:00 2001
+From: David Rientjes <rientjes@google.com>
+Date: Mon, 23 Jun 2014 13:22:04 -0700
+Subject: mm, pcp: allow restoring percpu_pagelist_fraction default
+
+From: David Rientjes <rientjes@google.com>
+
+commit 7cd2b0a34ab8e4db971920eef8982f985441adfb upstream.
+
+Oleg reports a division by zero error on zero-length write() to the
+percpu_pagelist_fraction sysctl:
+
+    divide error: 0000 [#1] SMP DEBUG_PAGEALLOC
+    CPU: 1 PID: 9142 Comm: badarea_io Not tainted 3.15.0-rc2-vm-nfs+ #19
+    Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
+    task: ffff8800d5aeb6e0 ti: ffff8800d87a2000 task.ti: ffff8800d87a2000
+    RIP: 0010: percpu_pagelist_fraction_sysctl_handler+0x84/0x120
+    RSP: 0018:ffff8800d87a3e78  EFLAGS: 00010246
+    RAX: 0000000000000f89 RBX: ffff88011f7fd000 RCX: 0000000000000000
+    RDX: 0000000000000000 RSI: 0000000000000001 RDI: 0000000000000010
+    RBP: ffff8800d87a3e98 R08: ffffffff81d002c8 R09: ffff8800d87a3f50
+    R10: 000000000000000b R11: 0000000000000246 R12: 0000000000000060
+    R13: ffffffff81c3c3e0 R14: ffffffff81cfddf8 R15: ffff8801193b0800
+    FS:  00007f614f1e9740(0000) GS:ffff88011f440000(0000) knlGS:0000000000000000
+    CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
+    CR2: 00007f614f1fa000 CR3: 00000000d9291000 CR4: 00000000000006e0
+    Call Trace:
+      proc_sys_call_handler+0xb3/0xc0
+      proc_sys_write+0x14/0x20
+      vfs_write+0xba/0x1e0
+      SyS_write+0x46/0xb0
+      tracesys+0xe1/0xe6
+
+However, if the percpu_pagelist_fraction sysctl is set by the user, it
+is also impossible to restore it to the kernel default since the user
+cannot write 0 to the sysctl.
+
+This patch allows the user to write 0 to restore the default behavior.
+It still requires a fraction equal to or larger than 8, however, as
+stated by the documentation for sanity.  If a value in the range [1, 7]
+is written, the sysctl will return EINVAL.
+
+This successfully solves the divide by zero issue at the same time.
+
+Signed-off-by: David Rientjes <rientjes@google.com>
+Reported-by: Oleg Drokin <green@linuxhacker.ru>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ Documentation/sysctl/vm.txt |    3 ++-
+ kernel/sysctl.c             |    3 +--
+ mm/page_alloc.c             |   40 ++++++++++++++++++++++++++++------------
+ 3 files changed, 31 insertions(+), 15 deletions(-)
+
+--- a/Documentation/sysctl/vm.txt
++++ b/Documentation/sysctl/vm.txt
+@@ -702,7 +702,8 @@ The batch value of each per cpu pagelist
+ set to pcp->high/4.  The upper limit of batch is (PAGE_SHIFT * 8)
+ The initial value is zero.  Kernel does not use this value at boot time to set
+-the high water marks for each per cpu page list.
++the high water marks for each per cpu page list.  If the user writes '0' to this
++sysctl, it will revert to this default behavior.
+ ==============================================================
+--- a/kernel/sysctl.c
++++ b/kernel/sysctl.c
+@@ -136,7 +136,6 @@ static unsigned long dirty_bytes_min = 2
+ /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */
+ static int maxolduid = 65535;
+ static int minolduid;
+-static int min_percpu_pagelist_fract = 8;
+ static int ngroups_max = NGROUPS_MAX;
+ static const int cap_last_cap = CAP_LAST_CAP;
+@@ -1305,7 +1304,7 @@ static struct ctl_table vm_table[] = {
+               .maxlen         = sizeof(percpu_pagelist_fraction),
+               .mode           = 0644,
+               .proc_handler   = percpu_pagelist_fraction_sysctl_handler,
+-              .extra1         = &min_percpu_pagelist_fract,
++              .extra1         = &zero,
+       },
+ #ifdef CONFIG_MMU
+       {
+--- a/mm/page_alloc.c
++++ b/mm/page_alloc.c
+@@ -69,6 +69,7 @@
+ /* prevent >1 _updater_ of zone percpu pageset ->high and ->batch fields */
+ static DEFINE_MUTEX(pcp_batch_high_lock);
++#define MIN_PERCPU_PAGELIST_FRACTION  (8)
+ #ifdef CONFIG_USE_PERCPU_NUMA_NODE_ID
+ DEFINE_PER_CPU(int, numa_node);
+@@ -4107,7 +4108,7 @@ static void __meminit zone_init_free_lis
+       memmap_init_zone((size), (nid), (zone), (start_pfn), MEMMAP_EARLY)
+ #endif
+-static int __meminit zone_batchsize(struct zone *zone)
++static int zone_batchsize(struct zone *zone)
+ {
+ #ifdef CONFIG_MMU
+       int batch;
+@@ -4223,8 +4224,8 @@ static void pageset_set_high(struct per_
+       pageset_update(&p->pcp, high, batch);
+ }
+-static void __meminit pageset_set_high_and_batch(struct zone *zone,
+-              struct per_cpu_pageset *pcp)
++static void pageset_set_high_and_batch(struct zone *zone,
++                                     struct per_cpu_pageset *pcp)
+ {
+       if (percpu_pagelist_fraction)
+               pageset_set_high(pcp,
+@@ -5850,23 +5851,38 @@ int percpu_pagelist_fraction_sysctl_hand
+       void __user *buffer, size_t *length, loff_t *ppos)
+ {
+       struct zone *zone;
+-      unsigned int cpu;
++      int old_percpu_pagelist_fraction;
+       int ret;
++      mutex_lock(&pcp_batch_high_lock);
++      old_percpu_pagelist_fraction = percpu_pagelist_fraction;
++
+       ret = proc_dointvec_minmax(table, write, buffer, length, ppos);
+-      if (!write || (ret < 0))
+-              return ret;
++      if (!write || ret < 0)
++              goto out;
++
++      /* Sanity checking to avoid pcp imbalance */
++      if (percpu_pagelist_fraction &&
++          percpu_pagelist_fraction < MIN_PERCPU_PAGELIST_FRACTION) {
++              percpu_pagelist_fraction = old_percpu_pagelist_fraction;
++              ret = -EINVAL;
++              goto out;
++      }
++
++      /* No change? */
++      if (percpu_pagelist_fraction == old_percpu_pagelist_fraction)
++              goto out;
+-      mutex_lock(&pcp_batch_high_lock);
+       for_each_populated_zone(zone) {
+-              unsigned long  high;
+-              high = zone->managed_pages / percpu_pagelist_fraction;
++              unsigned int cpu;
++
+               for_each_possible_cpu(cpu)
+-                      pageset_set_high(per_cpu_ptr(zone->pageset, cpu),
+-                                       high);
++                      pageset_set_high_and_batch(zone,
++                                      per_cpu_ptr(zone->pageset, cpu));
+       }
++out:
+       mutex_unlock(&pcp_batch_high_lock);
+-      return 0;
++      return ret;
+ }
+ int hashdist = HASHDIST_DEFAULT;
diff --git a/queue-3.15/net-allwinner-emac-add-missing-free_irq.patch b/queue-3.15/net-allwinner-emac-add-missing-free_irq.patch
new file mode 100644 (file)
index 0000000..64977ee
--- /dev/null
@@ -0,0 +1,32 @@
+From b91113282bf44df46aba374a0b8f88a75bfd4b3f Mon Sep 17 00:00:00 2001
+From: Maxime Ripard <maxime.ripard@free-electrons.com>
+Date: Mon, 23 Jun 2014 22:49:40 +0200
+Subject: net: allwinner: emac: Add missing free_irq
+
+From: Maxime Ripard <maxime.ripard@free-electrons.com>
+
+commit b91113282bf44df46aba374a0b8f88a75bfd4b3f upstream.
+
+If the mdio probe function fails in emac_open, the interrupt we just requested
+isn't freed. If emac_open is called again, for example because we try to set up
+the interface again, the kernel will oops because the interrupt wasn't properly
+released.
+
+Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/ethernet/allwinner/sun4i-emac.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/ethernet/allwinner/sun4i-emac.c
++++ b/drivers/net/ethernet/allwinner/sun4i-emac.c
+@@ -736,6 +736,7 @@ static int emac_open(struct net_device *
+       ret = emac_mdio_probe(dev);
+       if (ret < 0) {
++              free_irq(dev->irq, dev);
+               netdev_err(dev, "cannot probe MDIO bus\n");
+               return ret;
+       }
diff --git a/queue-3.15/regulator-tps65218-add-the-missing-of_node-assignment-in-probe.patch b/queue-3.15/regulator-tps65218-add-the-missing-of_node-assignment-in-probe.patch
new file mode 100644 (file)
index 0000000..d2dae79
--- /dev/null
@@ -0,0 +1,31 @@
+From d2fa87c3af0df7ed10463afc588affdab954fa92 Mon Sep 17 00:00:00 2001
+From: Keerthy <j-keerthy@ti.com>
+Date: Wed, 18 Jun 2014 10:17:47 -0500
+Subject: regulator: tps65218: Add the missing of_node assignment in probe
+
+From: Keerthy <j-keerthy@ti.com>
+
+commit d2fa87c3af0df7ed10463afc588affdab954fa92 upstream.
+
+Add the missing of_node assignment in probe.
+
+Fixes: 90e7d5262796 (regulator: tps65218: Add Regulator driver for TPS65218 PMIC)
+Signed-off-by: Keerthy <j-keerthy@ti.com>
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Mark Brown <broonie@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/regulator/tps65218-regulator.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/regulator/tps65218-regulator.c
++++ b/drivers/regulator/tps65218-regulator.c
+@@ -257,6 +257,7 @@ static int tps65218_regulator_probe(stru
+       config.init_data = init_data;
+       config.driver_data = tps;
+       config.regmap = tps->regmap;
++      config.of_node = pdev->dev.of_node;
+       rdev = devm_regulator_register(&pdev->dev, &regulators[id], &config);
+       if (IS_ERR(rdev)) {
diff --git a/queue-3.15/regulator-tps65218-correct-the-the-config-register-for-ldo1.patch b/queue-3.15/regulator-tps65218-correct-the-the-config-register-for-ldo1.patch
new file mode 100644 (file)
index 0000000..40298e7
--- /dev/null
@@ -0,0 +1,33 @@
+From 0eada6a1fc85a98ce69a199e46925abd6a7001c2 Mon Sep 17 00:00:00 2001
+From: Keerthy <j-keerthy@ti.com>
+Date: Wed, 18 Jun 2014 10:17:48 -0500
+Subject: regulator: tps65218: Correct the the config register for LDO1
+
+From: Keerthy <j-keerthy@ti.com>
+
+commit 0eada6a1fc85a98ce69a199e46925abd6a7001c2 upstream.
+
+Correct the the config register for LDO1.
+
+Fixes: 90e7d5262796 (regulator: tps65218: Add Regulator driver for
+TPS65218 PMIC)
+Signed-off-by: Keerthy <j-keerthy@ti.com>
+Signed-off-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: Mark Brown <broonie@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/regulator/tps65218-regulator.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/regulator/tps65218-regulator.c
++++ b/drivers/regulator/tps65218-regulator.c
+@@ -226,7 +226,7 @@ static const struct regulator_desc regul
+                          1, -1, -1, TPS65218_REG_ENABLE1,
+                          TPS65218_ENABLE1_DC6_EN, NULL, NULL, 0),
+       TPS65218_REGULATOR("LDO1", TPS65218_LDO_1, tps65218_ldo1_dcdc34_ops, 64,
+-                         TPS65218_REG_CONTROL_DCDC4,
++                         TPS65218_REG_CONTROL_LDO1,
+                          TPS65218_CONTROL_LDO1_MASK, TPS65218_REG_ENABLE2,
+                          TPS65218_ENABLE2_LDO1_EN, NULL, ldo1_dcdc3_ranges,
+                          2),
index fdbad80049a4feecc34f94d85b00758e2fd5d67b..1d1fc1bfb255e0828812aecc4e512c0a979d6ff5 100644 (file)
@@ -70,3 +70,19 @@ twl4030-madc-request-processed-values-in-twl4030_get_madc_conversion.patch
 mac80211-fix-ibss-join-by-initializing-last_scan_completed.patch
 mac80211-don-t-check-netdev-state-for-debugfs-read-write.patch
 mac80211-fix-a-memory-leak-on-sta-rate-selection-table.patch
+iwlwifi-pcie-try-to-get-ownership-several-times.patch
+mm-nommu-per-thread-vma-cache-fix.patch
+hugetlb-fix-copy_hugetlb_page_range-to-handle-migration-hwpoisoned-entry.patch
+mm-pcp-allow-restoring-percpu_pagelist_fraction-default.patch
+ia64-arch-ia64-include-uapi-asm-fcntl.h-needs-personality.h.patch
+arm-mvebu-fix-the-improper-use-of-the-compatible-string-armada38x-using-a-wildcard.patch
+arm64-mm-make-icache-synchronisation-logic-huge-page-aware.patch
+arm-omap2-fix-parser-bug-in-platform-muxing-code.patch
+arm64-bug-fix-in-stack-alignment-exception.patch
+net-allwinner-emac-add-missing-free_irq.patch
+b43-fix-frequency-reported-on-g-phy-with-new-firmware.patch
+fs-cifs-fix-regression-in-cifs_create_mf_symlink.patch
+cifs-fix-mount-failure-with-broken-pathnames-when-smb3-mount-with-mapchars-option.patch
+regulator-tps65218-add-the-missing-of_node-assignment-in-probe.patch
+regulator-tps65218-correct-the-the-config-register-for-ldo1.patch
+iommu-vt-d-fix-bug-in-handling-multiple-rmrrs-for-the-same-pci-device.patch