From: Greg Kroah-Hartman Date: Mon, 4 Aug 2014 21:18:18 +0000 (-0700) Subject: 3.15-stable patches X-Git-Tag: v3.4.102~32 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ca5a50cde359563e69e88fbad7cedbd13f767bec;p=thirdparty%2Fkernel%2Fstable-queue.git 3.15-stable patches added patches: arm-8115-1-lpae-reduce-damage-caused-by-idmap-to-virtual-memory-layout.patch arm-dts-fix-l2-address-in-hi3620.patch arm-fix-alignment-of-keystone-page-table-fixup.patch arm-omap2-gpmc-fix-gpmc_hwecc_bch_capable.patch ath9k-fix-aggregation-session-lockup.patch cfg80211-fix-mic_failure-tracing.patch crypto-af_alg-properly-label-af_alg-socket.patch crypto-arm-aes-fix-encryption-of-unaligned-data.patch powerpc-perf-fix-mmcr2-handling-for-ebb.patch rapidio-tsi721_dma-fix-failure-to-obtain-transaction-descriptor.patch revert-mac80211-move-bufferable-mmpdu-check-to-fix-ap-mode-scan.patch scsi-handle-flush-errors-properly.patch --- diff --git a/queue-3.15/arm-8115-1-lpae-reduce-damage-caused-by-idmap-to-virtual-memory-layout.patch b/queue-3.15/arm-8115-1-lpae-reduce-damage-caused-by-idmap-to-virtual-memory-layout.patch new file mode 100644 index 00000000000..29c68f083b4 --- /dev/null +++ b/queue-3.15/arm-8115-1-lpae-reduce-damage-caused-by-idmap-to-virtual-memory-layout.patch @@ -0,0 +1,51 @@ +From 811a2407a3cf7bbd027fbe92d73416f17485a3d8 Mon Sep 17 00:00:00 2001 +From: Konstantin Khlebnikov +Date: Fri, 25 Jul 2014 09:17:12 +0100 +Subject: ARM: 8115/1: LPAE: reduce damage caused by idmap to virtual memory layout + +From: Konstantin Khlebnikov + +commit 811a2407a3cf7bbd027fbe92d73416f17485a3d8 upstream. + +On LPAE, each level 1 (pgd) page table entry maps 1GiB, and the level 2 +(pmd) entries map 2MiB. + +When the identity mapping is created on LPAE, the pgd pointers are copied +from the swapper_pg_dir. If we find that we need to modify the contents +of a pmd, we allocate a new empty pmd table and insert it into the +appropriate 1GB slot, before then filling it with the identity mapping. + +However, if the 1GB slot covers the kernel lowmem mappings, we obliterate +those mappings. + +When replacing a PMD, first copy the old PMD contents to the new PMD, so +that we preserve the existing mappings, particularly the mappings of the +kernel itself. + +[rewrote commit message and added code comment -- rmk] + +Fixes: ae2de101739c ("ARM: LPAE: Add identity mapping support for the 3-level page table format") +Signed-off-by: Konstantin Khlebnikov +Signed-off-by: Russell King +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/mm/idmap.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +--- a/arch/arm/mm/idmap.c ++++ b/arch/arm/mm/idmap.c +@@ -25,6 +25,13 @@ static void idmap_add_pmd(pud_t *pud, un + pr_warning("Failed to allocate identity pmd.\n"); + return; + } ++ /* ++ * Copy the original PMD to ensure that the PMD entries for ++ * the kernel image are preserved. ++ */ ++ if (!pud_none(*pud)) ++ memcpy(pmd, pmd_offset(pud, 0), ++ PTRS_PER_PMD * sizeof(pmd_t)); + pud_populate(&init_mm, pud, pmd); + pmd += pmd_index(addr); + } else diff --git a/queue-3.15/arm-dts-fix-l2-address-in-hi3620.patch b/queue-3.15/arm-dts-fix-l2-address-in-hi3620.patch new file mode 100644 index 00000000000..3dfe1df930a --- /dev/null +++ b/queue-3.15/arm-dts-fix-l2-address-in-hi3620.patch @@ -0,0 +1,33 @@ +From 28c9770bcbd2b6dbab99669825a2f8fa69e6d35b Mon Sep 17 00:00:00 2001 +From: Haojian Zhuang +Date: Wed, 2 Apr 2014 21:31:50 +0800 +Subject: ARM: dts: fix L2 address in Hi3620 + +From: Haojian Zhuang + +commit 28c9770bcbd2b6dbab99669825a2f8fa69e6d35b upstream. + +Fix the address of L2 controler register in hi3620 SoC. +This has been wrong from the point that the file was merged +in v3.14. + +Signed-off-by: Haojian Zhuang +Acked-by: Wei Xu +Signed-off-by: Arnd Bergmann +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/boot/dts/hi3620.dtsi | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/arm/boot/dts/hi3620.dtsi ++++ b/arch/arm/boot/dts/hi3620.dtsi +@@ -73,7 +73,7 @@ + + L2: l2-cache { + compatible = "arm,pl310-cache"; +- reg = <0xfc10000 0x100000>; ++ reg = <0x100000 0x100000>; + interrupts = <0 15 4>; + cache-unified; + cache-level = <2>; diff --git a/queue-3.15/arm-fix-alignment-of-keystone-page-table-fixup.patch b/queue-3.15/arm-fix-alignment-of-keystone-page-table-fixup.patch new file mode 100644 index 00000000000..e3d69d8a4e5 --- /dev/null +++ b/queue-3.15/arm-fix-alignment-of-keystone-page-table-fixup.patch @@ -0,0 +1,42 @@ +From 823a19cd3b91b0729d7417f1848413846be61712 Mon Sep 17 00:00:00 2001 +From: Russell King +Date: Tue, 29 Jul 2014 09:24:47 +0100 +Subject: ARM: fix alignment of keystone page table fixup + +From: Russell King + +commit 823a19cd3b91b0729d7417f1848413846be61712 upstream. + +If init_mm.brk is not section aligned, the LPAE fixup code will miss +updating the final PMD. Fix this by aligning map_end. + +Fixes: a77e0c7b2774 ("ARM: mm: Recreate kernel mappings in early_paging_init()") +Signed-off-by: Russell King +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/mm/mmu.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/arch/arm/mm/mmu.c ++++ b/arch/arm/mm/mmu.c +@@ -1436,8 +1436,8 @@ void __init early_paging_init(const stru + return; + + /* remap kernel code and data */ +- map_start = init_mm.start_code; +- map_end = init_mm.brk; ++ map_start = init_mm.start_code & PMD_MASK; ++ map_end = ALIGN(init_mm.brk, PMD_SIZE); + + /* get a handle on things... */ + pgd0 = pgd_offset_k(0); +@@ -1472,7 +1472,7 @@ void __init early_paging_init(const stru + } + + /* remap pmds for kernel mapping */ +- phys = __pa(map_start) & PMD_MASK; ++ phys = __pa(map_start); + do { + *pmdk++ = __pmd(phys | pmdprot); + phys += PMD_SIZE; diff --git a/queue-3.15/arm-omap2-gpmc-fix-gpmc_hwecc_bch_capable.patch b/queue-3.15/arm-omap2-gpmc-fix-gpmc_hwecc_bch_capable.patch new file mode 100644 index 00000000000..efe05a73dd0 --- /dev/null +++ b/queue-3.15/arm-omap2-gpmc-fix-gpmc_hwecc_bch_capable.patch @@ -0,0 +1,57 @@ +From 33753cd2ba41c72a0756edc5dc094d91602deda5 Mon Sep 17 00:00:00 2001 +From: Christoph Fritz +Date: Mon, 14 Jul 2014 03:36:18 +0200 +Subject: ARM: OMAP2+: gpmc: fix gpmc_hwecc_bch_capable() + +From: Christoph Fritz + +commit 33753cd2ba41c72a0756edc5dc094d91602deda5 upstream. + +This patch adds bch8 ecc software fallback which is mostly used by +omap3s because they lack hardware elm support. + +Fixes: 0611c41934ab35ce84dea34ab291897ad3cbc7be (ARM: OMAP2+: gpmc: +update gpmc_hwecc_bch_capable() for new platforms and ECC schemes) +Signed-off-by: Christoph Fritz +Reviewed-by: Pekon Gupta +Signed-off-by: Tony Lindgren +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/mach-omap2/gpmc-nand.c | 18 ++++++++++-------- + 1 file changed, 10 insertions(+), 8 deletions(-) + +--- a/arch/arm/mach-omap2/gpmc-nand.c ++++ b/arch/arm/mach-omap2/gpmc-nand.c +@@ -50,6 +50,16 @@ static bool gpmc_hwecc_bch_capable(enum + soc_is_omap54xx() || soc_is_dra7xx()) + return 1; + ++ if (ecc_opt == OMAP_ECC_BCH4_CODE_HW_DETECTION_SW || ++ ecc_opt == OMAP_ECC_BCH8_CODE_HW_DETECTION_SW) { ++ if (cpu_is_omap24xx()) ++ return 0; ++ else if (cpu_is_omap3630() && (GET_OMAP_REVISION() == 0)) ++ return 0; ++ else ++ return 1; ++ } ++ + /* OMAP3xxx do not have ELM engine, so cannot support ECC schemes + * which require H/W based ECC error detection */ + if ((cpu_is_omap34xx() || cpu_is_omap3630()) && +@@ -57,14 +67,6 @@ static bool gpmc_hwecc_bch_capable(enum + (ecc_opt == OMAP_ECC_BCH8_CODE_HW))) + return 0; + +- /* +- * For now, assume 4-bit mode is only supported on OMAP3630 ES1.x, x>=1 +- * and AM33xx derivates. Other chips may be added if confirmed to work. +- */ +- if ((ecc_opt == OMAP_ECC_BCH4_CODE_HW_DETECTION_SW) && +- (!cpu_is_omap3630() || (GET_OMAP_REVISION() == 0))) +- return 0; +- + /* legacy platforms support only HAM1 (1-bit Hamming) ECC scheme */ + if (ecc_opt == OMAP_ECC_HAM1_CODE_HW) + return 1; diff --git a/queue-3.15/ath9k-fix-aggregation-session-lockup.patch b/queue-3.15/ath9k-fix-aggregation-session-lockup.patch new file mode 100644 index 00000000000..4ba2a9371e4 --- /dev/null +++ b/queue-3.15/ath9k-fix-aggregation-session-lockup.patch @@ -0,0 +1,44 @@ +From c01fac1c77a00227f706a1654317023e3f4ac7f0 Mon Sep 17 00:00:00 2001 +From: Felix Fietkau +Date: Wed, 23 Jul 2014 15:40:54 +0200 +Subject: ath9k: fix aggregation session lockup + +From: Felix Fietkau + +commit c01fac1c77a00227f706a1654317023e3f4ac7f0 upstream. + +If an aggregation session fails, frames still end up in the driver queue +with IEEE80211_TX_CTL_AMPDU set. +This causes tx for the affected station/tid to stall, since +ath_tx_get_tid_subframe returning packets to send. + +Fix this by clearing IEEE80211_TX_CTL_AMPDU as long as no aggregation +session is running. + +Reported-by: Antonio Quartulli +Signed-off-by: Felix Fietkau +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/ath/ath9k/xmit.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/drivers/net/wireless/ath/ath9k/xmit.c ++++ b/drivers/net/wireless/ath/ath9k/xmit.c +@@ -887,6 +887,15 @@ ath_tx_get_tid_subframe(struct ath_softc + + tx_info = IEEE80211_SKB_CB(skb); + tx_info->flags &= ~IEEE80211_TX_CTL_CLEAR_PS_FILT; ++ ++ /* ++ * No aggregation session is running, but there may be frames ++ * from a previous session or a failed attempt in the queue. ++ * Send them out as normal data frames ++ */ ++ if (!tid->active) ++ tx_info->flags &= ~IEEE80211_TX_CTL_AMPDU; ++ + if (!(tx_info->flags & IEEE80211_TX_CTL_AMPDU)) { + bf->bf_state.bf_type = 0; + return bf; diff --git a/queue-3.15/cfg80211-fix-mic_failure-tracing.patch b/queue-3.15/cfg80211-fix-mic_failure-tracing.patch new file mode 100644 index 00000000000..c9092b17084 --- /dev/null +++ b/queue-3.15/cfg80211-fix-mic_failure-tracing.patch @@ -0,0 +1,33 @@ +From 8c26d458394be44e135d1c6bd4557e1c4e1a0535 Mon Sep 17 00:00:00 2001 +From: Eliad Peller +Date: Thu, 17 Jul 2014 15:00:56 +0300 +Subject: cfg80211: fix mic_failure tracing + +From: Eliad Peller + +commit 8c26d458394be44e135d1c6bd4557e1c4e1a0535 upstream. + +tsc can be NULL (mac80211 currently always passes NULL), +resulting in NULL-dereference. check before copying it. + +Signed-off-by: Eliad Peller +Signed-off-by: Emmanuel Grumbach +Signed-off-by: Johannes Berg +Signed-off-by: Greg Kroah-Hartman + +--- + net/wireless/trace.h | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/net/wireless/trace.h ++++ b/net/wireless/trace.h +@@ -2072,7 +2072,8 @@ TRACE_EVENT(cfg80211_michael_mic_failure + MAC_ASSIGN(addr, addr); + __entry->key_type = key_type; + __entry->key_id = key_id; +- memcpy(__entry->tsc, tsc, 6); ++ if (tsc) ++ memcpy(__entry->tsc, tsc, 6); + ), + TP_printk(NETDEV_PR_FMT ", " MAC_PR_FMT ", key type: %d, key id: %d, tsc: %pm", + NETDEV_PR_ARG, MAC_PR_ARG(addr), __entry->key_type, diff --git a/queue-3.15/crypto-af_alg-properly-label-af_alg-socket.patch b/queue-3.15/crypto-af_alg-properly-label-af_alg-socket.patch new file mode 100644 index 00000000000..d7f261d449d --- /dev/null +++ b/queue-3.15/crypto-af_alg-properly-label-af_alg-socket.patch @@ -0,0 +1,46 @@ +From 4c63f83c2c2e16a13ce274ee678e28246bd33645 Mon Sep 17 00:00:00 2001 +From: Milan Broz +Date: Tue, 29 Jul 2014 18:41:09 +0000 +Subject: crypto: af_alg - properly label AF_ALG socket + +From: Milan Broz + +commit 4c63f83c2c2e16a13ce274ee678e28246bd33645 upstream. + +Th AF_ALG socket was missing a security label (e.g. SELinux) +which means that socket was in "unlabeled" state. + +This was recently demonstrated in the cryptsetup package +(cryptsetup v1.6.5 and later.) +See https://bugzilla.redhat.com/show_bug.cgi?id=1115120 + +This patch clones the sock's label from the parent sock +and resolves the issue (similar to AF_BLUETOOTH protocol family). + +Signed-off-by: Milan Broz +Acked-by: Paul Moore +Signed-off-by: Herbert Xu +Signed-off-by: Greg Kroah-Hartman + +--- + crypto/af_alg.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/crypto/af_alg.c ++++ b/crypto/af_alg.c +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + + struct alg_type_list { + const struct af_alg_type *type; +@@ -243,6 +244,7 @@ int af_alg_accept(struct sock *sk, struc + + sock_init_data(newsock, sk2); + sock_graft(sk2, newsock); ++ security_sk_clone(sk, sk2); + + err = type->accept(ask->private, sk2); + if (err) { diff --git a/queue-3.15/crypto-arm-aes-fix-encryption-of-unaligned-data.patch b/queue-3.15/crypto-arm-aes-fix-encryption-of-unaligned-data.patch new file mode 100644 index 00000000000..cdc98458bc7 --- /dev/null +++ b/queue-3.15/crypto-arm-aes-fix-encryption-of-unaligned-data.patch @@ -0,0 +1,68 @@ +From f3c400ef473e00c680ea713a66196b05870b3710 Mon Sep 17 00:00:00 2001 +From: Mikulas Patocka +Date: Fri, 25 Jul 2014 19:42:30 -0400 +Subject: crypto: arm-aes - fix encryption of unaligned data + +From: Mikulas Patocka + +commit f3c400ef473e00c680ea713a66196b05870b3710 upstream. + +Fix the same alignment bug as in arm64 - we need to pass residue +unprocessed bytes as the last argument to blkcipher_walk_done. + +Signed-off-by: Mikulas Patocka +Acked-by: Ard Biesheuvel +Signed-off-by: Herbert Xu +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/crypto/aesbs-glue.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +--- a/arch/arm/crypto/aesbs-glue.c ++++ b/arch/arm/crypto/aesbs-glue.c +@@ -137,7 +137,7 @@ static int aesbs_cbc_encrypt(struct blkc + dst += AES_BLOCK_SIZE; + } while (--blocks); + } +- err = blkcipher_walk_done(desc, &walk, 0); ++ err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); + } + return err; + } +@@ -158,7 +158,7 @@ static int aesbs_cbc_decrypt(struct blkc + bsaes_cbc_encrypt(walk.src.virt.addr, walk.dst.virt.addr, + walk.nbytes, &ctx->dec, walk.iv); + kernel_neon_end(); +- err = blkcipher_walk_done(desc, &walk, 0); ++ err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); + } + while (walk.nbytes) { + u32 blocks = walk.nbytes / AES_BLOCK_SIZE; +@@ -182,7 +182,7 @@ static int aesbs_cbc_decrypt(struct blkc + dst += AES_BLOCK_SIZE; + src += AES_BLOCK_SIZE; + } while (--blocks); +- err = blkcipher_walk_done(desc, &walk, 0); ++ err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); + } + return err; + } +@@ -268,7 +268,7 @@ static int aesbs_xts_encrypt(struct blkc + bsaes_xts_encrypt(walk.src.virt.addr, walk.dst.virt.addr, + walk.nbytes, &ctx->enc, walk.iv); + kernel_neon_end(); +- err = blkcipher_walk_done(desc, &walk, 0); ++ err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); + } + return err; + } +@@ -292,7 +292,7 @@ static int aesbs_xts_decrypt(struct blkc + bsaes_xts_decrypt(walk.src.virt.addr, walk.dst.virt.addr, + walk.nbytes, &ctx->dec, walk.iv); + kernel_neon_end(); +- err = blkcipher_walk_done(desc, &walk, 0); ++ err = blkcipher_walk_done(desc, &walk, walk.nbytes % AES_BLOCK_SIZE); + } + return err; + } diff --git a/queue-3.15/powerpc-perf-fix-mmcr2-handling-for-ebb.patch b/queue-3.15/powerpc-perf-fix-mmcr2-handling-for-ebb.patch new file mode 100644 index 00000000000..cdb7e32ce4e --- /dev/null +++ b/queue-3.15/powerpc-perf-fix-mmcr2-handling-for-ebb.patch @@ -0,0 +1,48 @@ +From 8903461c9bc56fcb041fb92d054e2529951770b6 Mon Sep 17 00:00:00 2001 +From: Michael Ellerman +Date: Wed, 23 Jul 2014 17:20:04 +1000 +Subject: powerpc/perf: Fix MMCR2 handling for EBB + +From: Michael Ellerman + +commit 8903461c9bc56fcb041fb92d054e2529951770b6 upstream. + +In the recent commit b50a6c584bb4 "Clear MMCR2 when enabling PMU", I +screwed up the handling of MMCR2 for tasks using EBB. + +We must make sure we set MMCR2 *before* ebb_switch_in(), otherwise we +overwrite the value of MMCR2 that userspace may have written. That +potentially breaks a task that uses EBB and manually uses MMCR2 for +event freezing. + +Fixes: b50a6c584bb4 ("powerpc/perf: Clear MMCR2 when enabling PMU") +Signed-off-by: Michael Ellerman +Signed-off-by: Benjamin Herrenschmidt +Signed-off-by: Greg Kroah-Hartman + +--- + arch/powerpc/perf/core-book3s.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/arch/powerpc/perf/core-book3s.c ++++ b/arch/powerpc/perf/core-book3s.c +@@ -1307,6 +1307,9 @@ static void power_pmu_enable(struct pmu + out_enable: + pmao_restore_workaround(ebb); + ++ if (ppmu->flags & PPMU_ARCH_207S) ++ mtspr(SPRN_MMCR2, 0); ++ + mmcr0 = ebb_switch_in(ebb, cpuhw->mmcr[0]); + + mb(); +@@ -1315,9 +1318,6 @@ static void power_pmu_enable(struct pmu + + write_mmcr0(cpuhw, mmcr0); + +- if (ppmu->flags & PPMU_ARCH_207S) +- mtspr(SPRN_MMCR2, 0); +- + /* + * Enable instruction sampling if necessary + */ diff --git a/queue-3.15/rapidio-tsi721_dma-fix-failure-to-obtain-transaction-descriptor.patch b/queue-3.15/rapidio-tsi721_dma-fix-failure-to-obtain-transaction-descriptor.patch new file mode 100644 index 00000000000..46ab3d64372 --- /dev/null +++ b/queue-3.15/rapidio-tsi721_dma-fix-failure-to-obtain-transaction-descriptor.patch @@ -0,0 +1,57 @@ +From 0193ed8225e1a79ed64632106ec3cc81798cb13c Mon Sep 17 00:00:00 2001 +From: Alexandre Bounine +Date: Wed, 30 Jul 2014 16:08:26 -0700 +Subject: rapidio/tsi721_dma: fix failure to obtain transaction descriptor + +From: Alexandre Bounine + +commit 0193ed8225e1a79ed64632106ec3cc81798cb13c upstream. + +This is a bug fix for the situation when function tsi721_desc_get() fails +to obtain a free transaction descriptor. + +The bug usually results in a memory access crash dump when data transfer +scatter-gather list has more entries than size of hardware buffer +descriptors ring. This fix ensures that error is properly returned to a +caller instead of an invalid entry. + +This patch is applicable to kernel versions starting from v3.5. + +Signed-off-by: Alexandre Bounine +Cc: Matt Porter +Cc: Andre van Herk +Cc: Stef van Os +Cc: Vinod Koul +Cc: Dan Williams +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/rapidio/devices/tsi721_dma.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +--- a/drivers/rapidio/devices/tsi721_dma.c ++++ b/drivers/rapidio/devices/tsi721_dma.c +@@ -287,6 +287,12 @@ struct tsi721_tx_desc *tsi721_desc_get(s + "desc %p not ACKed\n", tx_desc); + } + ++ if (ret == NULL) { ++ dev_dbg(bdma_chan->dchan.device->dev, ++ "%s: unable to obtain tx descriptor\n", __func__); ++ goto err_out; ++ } ++ + i = bdma_chan->wr_count_next % bdma_chan->bd_num; + if (i == bdma_chan->bd_num - 1) { + i = 0; +@@ -297,7 +303,7 @@ struct tsi721_tx_desc *tsi721_desc_get(s + tx_desc->txd.phys = bdma_chan->bd_phys + + i * sizeof(struct tsi721_dma_desc); + tx_desc->hw_desc = &((struct tsi721_dma_desc *)bdma_chan->bd_base)[i]; +- ++err_out: + spin_unlock_bh(&bdma_chan->lock); + + return ret; diff --git a/queue-3.15/revert-mac80211-move-bufferable-mmpdu-check-to-fix-ap-mode-scan.patch b/queue-3.15/revert-mac80211-move-bufferable-mmpdu-check-to-fix-ap-mode-scan.patch new file mode 100644 index 00000000000..0fd29aa1dee --- /dev/null +++ b/queue-3.15/revert-mac80211-move-bufferable-mmpdu-check-to-fix-ap-mode-scan.patch @@ -0,0 +1,78 @@ +From 08b9939997df30e42a228e1ecb97f99e9c8ea84e Mon Sep 17 00:00:00 2001 +From: Johannes Berg +Date: Mon, 7 Jul 2014 12:01:11 +0200 +Subject: Revert "mac80211: move "bufferable MMPDU" check to fix AP mode scan" + +From: Johannes Berg + +commit 08b9939997df30e42a228e1ecb97f99e9c8ea84e upstream. + +This reverts commit 277d916fc2e959c3f106904116bb4f7b1148d47a as it was +at least breaking iwlwifi by setting the IEEE80211_TX_CTL_NO_PS_BUFFER +flag in all kinds of interface modes, not only for AP mode where it is +appropriate. + +To avoid reintroducing the original problem, explicitly check for probe +request frames in the multicast buffering code. + +Fixes: 277d916fc2e9 ("mac80211: move "bufferable MMPDU" check to fix AP mode scan") +Signed-off-by: Johannes Berg +Signed-off-by: Greg Kroah-Hartman + +--- + net/mac80211/tx.c | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +--- a/net/mac80211/tx.c ++++ b/net/mac80211/tx.c +@@ -414,6 +414,9 @@ ieee80211_tx_h_multicast_ps_buf(struct i + if (ieee80211_has_order(hdr->frame_control)) + return TX_CONTINUE; + ++ if (ieee80211_is_probe_req(hdr->frame_control)) ++ return TX_CONTINUE; ++ + if (tx->local->hw.flags & IEEE80211_HW_QUEUE_CONTROL) + info->hw_queue = tx->sdata->vif.cab_queue; + +@@ -463,6 +466,7 @@ ieee80211_tx_h_unicast_ps_buf(struct iee + { + struct sta_info *sta = tx->sta; + struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); ++ struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; + struct ieee80211_local *local = tx->local; + + if (unlikely(!sta)) +@@ -473,6 +477,12 @@ ieee80211_tx_h_unicast_ps_buf(struct iee + !(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER))) { + int ac = skb_get_queue_mapping(tx->skb); + ++ if (ieee80211_is_mgmt(hdr->frame_control) && ++ !ieee80211_is_bufferable_mmpdu(hdr->frame_control)) { ++ info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; ++ return TX_CONTINUE; ++ } ++ + ps_dbg(sta->sdata, "STA %pM aid %d: PS buffer for AC %d\n", + sta->sta.addr, sta->sta.aid, ac); + if (tx->local->total_ps_buffered >= TOTAL_MAX_TX_BUFFER) +@@ -531,19 +541,9 @@ ieee80211_tx_h_unicast_ps_buf(struct iee + static ieee80211_tx_result debug_noinline + ieee80211_tx_h_ps_buf(struct ieee80211_tx_data *tx) + { +- struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); +- struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; +- + if (unlikely(tx->flags & IEEE80211_TX_PS_BUFFERED)) + return TX_CONTINUE; + +- if (ieee80211_is_mgmt(hdr->frame_control) && +- !ieee80211_is_bufferable_mmpdu(hdr->frame_control)) { +- if (tx->flags & IEEE80211_TX_UNICAST) +- info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; +- return TX_CONTINUE; +- } +- + if (tx->flags & IEEE80211_TX_UNICAST) + return ieee80211_tx_h_unicast_ps_buf(tx); + else diff --git a/queue-3.15/scsi-handle-flush-errors-properly.patch b/queue-3.15/scsi-handle-flush-errors-properly.patch new file mode 100644 index 00000000000..004579f622d --- /dev/null +++ b/queue-3.15/scsi-handle-flush-errors-properly.patch @@ -0,0 +1,41 @@ +From 89fb4cd1f717a871ef79fa7debbe840e3225cd54 Mon Sep 17 00:00:00 2001 +From: James Bottomley +Date: Thu, 3 Jul 2014 19:17:34 +0200 +Subject: scsi: handle flush errors properly + +From: James Bottomley + +commit 89fb4cd1f717a871ef79fa7debbe840e3225cd54 upstream. + +Flush commands don't transfer data and thus need to be special cased +in the I/O completion handler so that we can propagate errors to +the block layer and filesystem. + +Signed-off-by: James Bottomley +Reported-by: Steven Haber +Tested-by: Steven Haber +Reviewed-by: Martin K. Petersen +Signed-off-by: Christoph Hellwig +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/scsi/scsi_lib.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/drivers/scsi/scsi_lib.c ++++ b/drivers/scsi/scsi_lib.c +@@ -806,6 +806,14 @@ void scsi_io_completion(struct scsi_cmnd + scsi_next_command(cmd); + return; + } ++ } else if (blk_rq_bytes(req) == 0 && result && !sense_deferred) { ++ /* ++ * Certain non BLOCK_PC requests are commands that don't ++ * actually transfer anything (FLUSH), so cannot use ++ * good_bytes != blk_rq_bytes(req) as the signal for an error. ++ * This sets the error explicitly for the problem case. ++ */ ++ error = __scsi_error_from_host_byte(cmd, result); + } + + /* no bidi support for !REQ_TYPE_BLOCK_PC yet */