From: Greg Kroah-Hartman Date: Mon, 7 Jul 2014 20:16:43 +0000 (-0700) Subject: 3.15-stable patches X-Git-Tag: v3.4.98~31 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b1245d4e733e0a391a153767d93c7a421415ceb6;p=thirdparty%2Fkernel%2Fstable-queue.git 3.15-stable patches 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 --- 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 index 00000000000..139454c2e16 --- /dev/null +++ b/queue-3.15/arm-mvebu-fix-the-improper-use-of-the-compatible-string-armada38x-using-a-wildcard.patch @@ -0,0 +1,106 @@ +From 8dbdb8e704db34085f5978c335c10256b0fb9629 Mon Sep 17 00:00:00 2001 +From: Gregory CLEMENT +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 + +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 +Link: https://lkml.kernel.org/r/1403533011-21339-1-git-send-email-gregory.clement@free-electrons.com +Acked-by: Andrew Lunn +Signed-off-by: Jason Cooper +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..ca0ef00ffa7 --- /dev/null +++ b/queue-3.15/arm-omap2-fix-parser-bug-in-platform-muxing-code.patch @@ -0,0 +1,60 @@ +From c021f241f4fab2bb4fc4120a38a828a03dd3f970 Mon Sep 17 00:00:00 2001 +From: "David R. Piegdon" +Date: Mon, 16 Jun 2014 23:42:51 +0000 +Subject: ARM: OMAP2+: Fix parser-bug in platform muxing code + +From: "David R. Piegdon" + +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 +Cc: stable@vger.kernel.org +[tony@atomide.com: updated description to include full description] +Signed-off-by: Tony Lindgren +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..680eacb2b42 --- /dev/null +++ b/queue-3.15/arm64-bug-fix-in-stack-alignment-exception.patch @@ -0,0 +1,35 @@ +From 3906c2b53cd23c2ae03e6ce41432c8e7f0a3cbbb Mon Sep 17 00:00:00 2001 +From: ChiaHao +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 + +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 +Signed-off-by: Catalin Marinas +Cc: +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..88a0e264aa9 --- /dev/null +++ b/queue-3.15/arm64-mm-make-icache-synchronisation-logic-huge-page-aware.patch @@ -0,0 +1,39 @@ +From 923b8f5044da753e4985ab15c1374ced2cdf616c Mon Sep 17 00:00:00 2001 +From: Steve Capper +Date: Wed, 2 Jul 2014 11:46:23 +0100 +Subject: arm64: mm: Make icache synchronisation logic huge page aware + +From: Steve Capper + +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 +Tested-by: Mark Brown +Signed-off-by: Steve Capper +Acked-by: Will Deacon +Signed-off-by: Catalin Marinas +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..796e509a576 --- /dev/null +++ b/queue-3.15/b43-fix-frequency-reported-on-g-phy-with-new-firmware.patch @@ -0,0 +1,54 @@ +From 2fc68eb122c7ea6cd5be1fe7d6650c0beb2f4f40 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= +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?= + +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 +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 +Signed-off-by: Rafał Miłecki +Tested-by: Aaro Koskinen +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..a74e6e4c58c --- /dev/null +++ b/queue-3.15/cifs-fix-mount-failure-with-broken-pathnames-when-smb3-mount-with-mapchars-option.patch @@ -0,0 +1,58 @@ +From ce36d9ab3bab06b7b5522f5c8b68fac231b76ffb Mon Sep 17 00:00:00 2001 +From: Steve French +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 + +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 +Reviewed-by: David Disseldorp +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..d25243d8ca4 --- /dev/null +++ b/queue-3.15/fs-cifs-fix-regression-in-cifs_create_mf_symlink.patch @@ -0,0 +1,39 @@ +From a1d0b84c308d7fdfb67eb76498116a6c2fdda507 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Bj=C3=B6rn=20Baumbach?= +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?= + +commit a1d0b84c308d7fdfb67eb76498116a6c2fdda507 upstream. + +commit d81b8a40e2ece0a9ab57b1fe1798e291e75bf8fc +("CIFS: Cleanup cifs open codepath") +changed disposition to FILE_OPEN. + +Signed-off-by: Björn Baumbach +Signed-off-by: Stefan Metzmacher +Reviewed-by: Stefan Metzmacher +Cc: Pavel Shilovsky +Cc: Steve French +Signed-off-by: Steve French +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..5f60651689c --- /dev/null +++ b/queue-3.15/hugetlb-fix-copy_hugetlb_page_range-to-handle-migration-hwpoisoned-entry.patch @@ -0,0 +1,123 @@ +From 4a705fef986231a3e7a6b1a6d3c37025f021f49f Mon Sep 17 00:00:00 2001 +From: Naoya Horiguchi +Date: Mon, 23 Jun 2014 13:22:03 -0700 +Subject: hugetlb: fix copy_hugetlb_page_range() to handle migration/hwpoisoned entry + +From: Naoya Horiguchi + +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 +Acked-by: Hugh Dickins +Cc: Christoph Lameter +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..97bf3582b4a --- /dev/null +++ b/queue-3.15/ia64-arch-ia64-include-uapi-asm-fcntl.h-needs-personality.h.patch @@ -0,0 +1,36 @@ +From f9af420fc8208d3add2fe3198dc5d8215f5a81ba Mon Sep 17 00:00:00 2001 +From: Andrew Morton +Date: Mon, 23 Jun 2014 13:22:07 -0700 +Subject: ia64: arch/ia64/include/uapi/asm/fcntl.h needs personality.h + +From: Andrew Morton + +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 +Cc: Will Woods +Cc: "Luck, Tony" +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + 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 + #include + + #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 index 00000000000..be3c831ba9a --- /dev/null +++ b/queue-3.15/iommu-vt-d-fix-bug-in-handling-multiple-rmrrs-for-the-same-pci-device.patch @@ -0,0 +1,46 @@ +From 27e249501ca06a3010519c306206cc402b61b5ab Mon Sep 17 00:00:00 2001 +From: Jiang Liu +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 + +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 +Tested-by: Linda Knippers +Signed-off-by: Jiang Liu +Signed-off-by: Joerg Roedel +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..35431b6857e --- /dev/null +++ b/queue-3.15/iwlwifi-pcie-try-to-get-ownership-several-times.patch @@ -0,0 +1,66 @@ +From 501fd9895c1d7d8161ed56698ae2fccb10ef14f5 Mon Sep 17 00:00:00 2001 +From: Emmanuel Grumbach +Date: Thu, 8 May 2014 12:15:22 +0300 +Subject: iwlwifi: pcie: try to get ownership several times + +From: Emmanuel Grumbach + +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 +Signed-off-by: Emmanuel Grumbach +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..adbe8447bd6 --- /dev/null +++ b/queue-3.15/mm-nommu-per-thread-vma-cache-fix.patch @@ -0,0 +1,145 @@ +From e020d5bd8a730757b565b18d620240f71c3e21fe Mon Sep 17 00:00:00 2001 +From: Steven Miao +Date: Mon, 23 Jun 2014 13:22:02 -0700 +Subject: mm: nommu: per-thread vma cache fix + +From: Steven Miao + +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 +Acked-by: Davidlohr Bueso +Reviewed-by: Rik van Riel +Acked-by: David Rientjes +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..dd843d57e78 --- /dev/null +++ b/queue-3.15/mm-pcp-allow-restoring-percpu_pagelist_fraction-default.patch @@ -0,0 +1,165 @@ +From 7cd2b0a34ab8e4db971920eef8982f985441adfb Mon Sep 17 00:00:00 2001 +From: David Rientjes +Date: Mon, 23 Jun 2014 13:22:04 -0700 +Subject: mm, pcp: allow restoring percpu_pagelist_fraction default + +From: David Rientjes + +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 +Reported-by: Oleg Drokin +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..64977ee5610 --- /dev/null +++ b/queue-3.15/net-allwinner-emac-add-missing-free_irq.patch @@ -0,0 +1,32 @@ +From b91113282bf44df46aba374a0b8f88a75bfd4b3f Mon Sep 17 00:00:00 2001 +From: Maxime Ripard +Date: Mon, 23 Jun 2014 22:49:40 +0200 +Subject: net: allwinner: emac: Add missing free_irq + +From: Maxime Ripard + +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 +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..d2dae79eb85 --- /dev/null +++ b/queue-3.15/regulator-tps65218-add-the-missing-of_node-assignment-in-probe.patch @@ -0,0 +1,31 @@ +From d2fa87c3af0df7ed10463afc588affdab954fa92 Mon Sep 17 00:00:00 2001 +From: Keerthy +Date: Wed, 18 Jun 2014 10:17:47 -0500 +Subject: regulator: tps65218: Add the missing of_node assignment in probe + +From: Keerthy + +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 +Signed-off-by: Felipe Balbi +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + 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, ®ulators[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 index 00000000000..40298e79a39 --- /dev/null +++ b/queue-3.15/regulator-tps65218-correct-the-the-config-register-for-ldo1.patch @@ -0,0 +1,33 @@ +From 0eada6a1fc85a98ce69a199e46925abd6a7001c2 Mon Sep 17 00:00:00 2001 +From: Keerthy +Date: Wed, 18 Jun 2014 10:17:48 -0500 +Subject: regulator: tps65218: Correct the the config register for LDO1 + +From: Keerthy + +commit 0eada6a1fc85a98ce69a199e46925abd6a7001c2 upstream. + +Correct the the config register for LDO1. + +Fixes: 90e7d5262796 (regulator: tps65218: Add Regulator driver for +TPS65218 PMIC) +Signed-off-by: Keerthy +Signed-off-by: Felipe Balbi +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + 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), diff --git a/queue-3.15/series b/queue-3.15/series index fdbad80049a..1d1fc1bfb25 100644 --- a/queue-3.15/series +++ b/queue-3.15/series @@ -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