From: Greg Kroah-Hartman Date: Mon, 16 Mar 2015 13:37:13 +0000 (+0100) Subject: 3.14-stable patches X-Git-Tag: v3.10.72~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c86573effec9c410743602c7978fce42b7e4f018;p=thirdparty%2Fkernel%2Fstable-queue.git 3.14-stable patches added patches: asoc-omap-pcm-correct-dma-mask.patch ath5k-fix-spontaneus-ar5312-freezes.patch ath6kl-fix-struct-hif_scatter_req-list-handling.patch clk-gate-fix-bit-check-in-clk_register_gate.patch nfsv4-don-t-call-put_rpccred-under-the-rcu_read_lock.patch --- diff --git a/queue-3.14/asoc-omap-pcm-correct-dma-mask.patch b/queue-3.14/asoc-omap-pcm-correct-dma-mask.patch new file mode 100644 index 00000000000..cd1de62ac3a --- /dev/null +++ b/queue-3.14/asoc-omap-pcm-correct-dma-mask.patch @@ -0,0 +1,37 @@ +From d51199a83a2cf82a291d19ee852c44caa511427d Mon Sep 17 00:00:00 2001 +From: Peter Ujfalusi +Date: Tue, 3 Mar 2015 13:38:14 +0200 +Subject: ASoC: omap-pcm: Correct dma mask + +From: Peter Ujfalusi + +commit d51199a83a2cf82a291d19ee852c44caa511427d upstream. + +DMA_BIT_MASK of 64 is not valid dma address mask for OMAPs, it should be +set to 32. +The 64 was introduced by commit (in 2009): +a152ff24b978 ASoC: OMAP: Make DMA 64 aligned + +But the dma_mask and coherent_dma_mask can not be used to specify alignment. + +Fixes: a152ff24b978 (ASoC: OMAP: Make DMA 64 aligned) +Reported-by: Grygorii Strashko +Signed-off-by: Peter Ujfalusi +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + sound/soc/omap/omap-pcm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/sound/soc/omap/omap-pcm.c ++++ b/sound/soc/omap/omap-pcm.c +@@ -200,7 +200,7 @@ static int omap_pcm_new(struct snd_soc_p + struct snd_pcm *pcm = rtd->pcm; + int ret; + +- ret = dma_coerce_mask_and_coherent(card->dev, DMA_BIT_MASK(64)); ++ ret = dma_coerce_mask_and_coherent(card->dev, DMA_BIT_MASK(32)); + if (ret) + return ret; + diff --git a/queue-3.14/ath5k-fix-spontaneus-ar5312-freezes.patch b/queue-3.14/ath5k-fix-spontaneus-ar5312-freezes.patch new file mode 100644 index 00000000000..6b219301ff3 --- /dev/null +++ b/queue-3.14/ath5k-fix-spontaneus-ar5312-freezes.patch @@ -0,0 +1,56 @@ +From 8bfae4f9938b6c1f033a5159febe97e441d6d526 Mon Sep 17 00:00:00 2001 +From: Sergey Ryazanov +Date: Wed, 4 Feb 2015 00:21:13 +0300 +Subject: ath5k: fix spontaneus AR5312 freezes + +From: Sergey Ryazanov + +commit 8bfae4f9938b6c1f033a5159febe97e441d6d526 upstream. + +Sometimes while CPU have some load and ath5k doing the wireless +interface reset the whole WiSoC completely freezes. Set of tests shows +that using atomic delay function while we wait interface reset helps to +avoid such freezes. + +The easiest way to reproduce this issue: create a station interface, +start continous scan with wpa_supplicant and load CPU by something. Or +just create multiple station interfaces and put them all in continous +scan. + +This patch partially reverts the commit 1846ac3dbec0 ("ath5k: Use +usleep_range where possible"), which replaces initial udelay() +by usleep_range(). + +I do not know actual source of this issue, but all looks like that HW +freeze is caused by transaction on internal SoC bus, while wireless +block is in reset state. + +Also I should note that I do not know how many chips are affected, but I +did not see this issue with chips, other than AR5312. + +CC: Jiri Slaby +CC: Nick Kossifidis +CC: Luis R. Rodriguez +Fixes: 1846ac3dbec0 ("ath5k: Use usleep_range where possible") +Reported-by: Christophe Prevotaux +Tested-by: Christophe Prevotaux +Tested-by: Eric Bree +Signed-off-by: Sergey Ryazanov +Signed-off-by: Kalle Valo +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/ath/ath5k/reset.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/wireless/ath/ath5k/reset.c ++++ b/drivers/net/wireless/ath/ath5k/reset.c +@@ -478,7 +478,7 @@ ath5k_hw_wisoc_reset(struct ath5k_hw *ah + regval = ioread32(reg); + iowrite32(regval | val, reg); + regval = ioread32(reg); +- usleep_range(100, 150); ++ udelay(100); /* NB: should be atomic */ + + /* Bring BB/MAC out of reset */ + iowrite32(regval & ~val, reg); diff --git a/queue-3.14/ath6kl-fix-struct-hif_scatter_req-list-handling.patch b/queue-3.14/ath6kl-fix-struct-hif_scatter_req-list-handling.patch new file mode 100644 index 00000000000..160488a84dc --- /dev/null +++ b/queue-3.14/ath6kl-fix-struct-hif_scatter_req-list-handling.patch @@ -0,0 +1,129 @@ +From 31b9cc9a873dcab161999622314f98a75d838975 Mon Sep 17 00:00:00 2001 +From: Kalle Valo +Date: Tue, 11 Mar 2014 12:58:00 +0200 +Subject: ath6kl: fix struct hif_scatter_req list handling + +From: Kalle Valo + +commit 31b9cc9a873dcab161999622314f98a75d838975 upstream. + +Jason noticed that with Yocto GCC 4.8.1 ath6kl crashes with this iperf command: + +iperf -c $TARGET_IP -i 5 -t 50 -w 1M + +The crash was: + +Unable to handle kernel paging request at virtual address 1a480000 +pgd = 80004000 +[1a480000] *pgd=00000000 +Internal error: Oops: 805 [#1] SMP ARM +Modules linked in: ath6kl_sdio ath6kl_core [last unloaded: ath6kl_core] +CPU: 0 PID: 1953 Comm: kworker/u4:0 Not tainted 3.10.9-1.0.0_alpha+dbf364b #1 +Workqueue: ath6kl ath6kl_sdio_write_async_work [ath6kl_sdio] +task: dcc9a680 ti: dc9ae000 task.ti: dc9ae000 +PC is at v7_dma_clean_range+0x20/0x38 +LR is at dma_cache_maint_page+0x50/0x54 +pc : [<8001a6f8>] lr : [<800170fc>] psr: 20000093 +sp : dc9afcf8 ip : 8001a748 fp : 00000004 +r10: 00000000 r9 : 00000001 r8 : 00000000 +r7 : 00000001 r6 : 00000000 r5 : 80cb7000 r4 : 03f9a480 +r3 : 0000001f r2 : 00000020 r1 : 1a480000 r0 : 1a480000 +Flags: nzCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel +Control: 10c53c7d Table: 6cc5004a DAC: 00000015 +Process kworker/u4:0 (pid: 1953, stack limit = 0xdc9ae238) +Stack: (0xdc9afcf8 to 0xdc9b0000) +fce0: 80c9b29c 00000000 +fd00: 00000000 80017134 8001a748 dc302ac0 00000000 00000000 dc454a00 80c12ed8 +fd20: dc115410 80017238 00000000 dc454a10 00000001 80017588 00000001 00000000 +fd40: 00000000 dc302ac0 dc9afe38 dc9afe68 00000004 80c12ed8 00000000 dc454a00 +fd60: 00000004 80436f88 00000000 00000000 00000600 0000ffff 0000000c 80c113c4 +fd80: 80c9b29c 00000001 00000004 dc115470 60000013 dc302ac0 dc46e000 dc302800 +fda0: dc9afe10 dc302b78 60000013 dc302ac0 dc46e000 00000035 dc46e5b0 80438c90 +fdc0: dc9afe10 dc302800 dc302800 dc9afe68 dc9afe38 80424cb4 00000005 dc9afe10 +fde0: dc9afe20 80424de8 dc9afe10 dc302800 dc46e910 80424e90 dc473c00 dc454f00 +fe00: 000001b5 7f619d64 dcc7c830 00000000 00000000 dc9afe38 dc9afe68 00000000 +fe20: 00000000 00000000 dc9afe28 dc9afe28 80424d80 00000000 00000035 9cac0034 +fe40: 00000000 00000000 00000000 00000000 000001b5 00000000 00000000 00000000 +fe60: dc9afe68 dc9afe10 3b9aca00 00000000 00000080 00000034 00000000 00000100 +fe80: 00000000 00000000 dc9afe10 00000004 dc454a00 00000000 dc46e010 dc46e96c +fea0: dc46e000 dc46e964 00200200 00100100 dc46e910 7f619ec0 00000600 80c0e770 +fec0: dc15a900 dcc7c838 00000000 dc46e954 8042d434 dcc44680 dc46e954 dc004400 +fee0: dc454500 00000000 00000000 dc9ae038 dc004400 8003c450 dcc44680 dc004414 +ff00: dc46e954 dc454500 00000001 dcc44680 dc004414 dcc44698 dc9ae000 dc9ae030 +ff20: 00000001 dc9ae000 dc004400 8003d158 8003d020 00000000 00000000 80c53941 +ff40: dc9aff64 dcb71ea0 00000000 dcc44680 8003d020 00000000 00000000 00000000 +ff60: 00000000 80042480 00000000 00000000 000000f8 dcc44680 00000000 00000000 +ff80: dc9aff80 dc9aff80 00000000 00000000 dc9aff90 dc9aff90 dc9affac dcb71ea0 +ffa0: 800423cc 00000000 00000000 8000e018 00000000 00000000 00000000 00000000 +ffc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 +ffe0: 00000000 00000000 00000000 00000000 00000013 00000000 00000000 00000000 +[<8001a6f8>] (v7_dma_clean_range+0x20/0x38) from [<800170fc>] (dma_cache_maint_page+0x50/0x54) +[<800170fc>] (dma_cache_maint_page+0x50/0x54) from [<80017134>] (__dma_page_cpu_to_dev+0x34/0x9c) +[<80017134>] (__dma_page_cpu_to_dev+0x34/0x9c) from [<80017238>] (arm_dma_map_page+0x64/0x68) +[<80017238>] (arm_dma_map_page+0x64/0x68) from [<80017588>] (arm_dma_map_sg+0x7c/0xf4) +[<80017588>] (arm_dma_map_sg+0x7c/0xf4) from [<80436f88>] (sdhci_send_command+0x894/0xe00) +[<80436f88>] (sdhci_send_command+0x894/0xe00) from [<80438c90>] (sdhci_request+0xc0/0x1ec) +[<80438c90>] (sdhci_request+0xc0/0x1ec) from [<80424cb4>] (mmc_start_request+0xb8/0xd4) +[<80424cb4>] (mmc_start_request+0xb8/0xd4) from [<80424de8>] (__mmc_start_req+0x60/0x84) +[<80424de8>] (__mmc_start_req+0x60/0x84) from [<80424e90>] (mmc_wait_for_req+0x10/0x20) +[<80424e90>] (mmc_wait_for_req+0x10/0x20) from [<7f619d64>] (ath6kl_sdio_scat_rw.isra.10+0x1dc/0x240 [ath6kl_sdio]) +[<7f619d64>] (ath6kl_sdio_scat_rw.isra.10+0x1dc/0x240 [ath6kl_sdio]) from [<7f619ec0>] (ath6kl_sdio_write_async_work+0x5c/0x104 [ath6kl_sdio]) +[<7f619ec0>] (ath6kl_sdio_write_async_work+0x5c/0x104 [ath6kl_sdio]) from [<8003c450>] (process_one_work+0x10c/0x370) +[<8003c450>] (process_one_work+0x10c/0x370) from [<8003d158>] (worker_thread+0x138/0x3fc) +[<8003d158>] (worker_thread+0x138/0x3fc) from [<80042480>] (kthread+0xb4/0xb8) +[<80042480>] (kthread+0xb4/0xb8) from [<8000e018>] (ret_from_fork+0x14/0x3c) +Code: e1a02312 e2423001 e1c00003 f57ff04f (ee070f3a) +---[ end trace 0c038f0b8e0b67a3 ]--- +Kernel panic - not syncing: Fatal exception + +Jason's analysis: + + "The GCC 4.8.1 compiler will not do the for-loop till scat_entries, instead, + it only run one round loop. This may be caused by that the GCC 4.8.1 thought + that the scat_list only have one item and then no need to do full iteration, + but this is simply wrong by looking at the assebly code. This will cause the sg + buffer not get set when scat_entries > 1 and thus lead to kernel panic. + + Note: This issue not observed with GCC 4.7.2, only found on the GCC 4.8.1)" + +Fix this by using the normal [0] style for defining unknown number of list +entries following the struct. This also fixes corruption with scat_q_depth, which +was mistankely added to the end of struct and overwritten if there were more +than item in the scat list. + +Reported-by: Jason Liu +Tested-by: Jason Liu +Signed-off-by: Kalle Valo +Cc: Josh Cartwright +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/ath/ath6kl/hif.h | 4 ++-- + drivers/net/wireless/ath/ath6kl/sdio.c | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +--- a/drivers/net/wireless/ath/ath6kl/hif.h ++++ b/drivers/net/wireless/ath/ath6kl/hif.h +@@ -197,9 +197,9 @@ struct hif_scatter_req { + /* bounce buffer for upper layers to copy to/from */ + u8 *virt_dma_buf; + +- struct hif_scatter_item scat_list[1]; +- + u32 scat_q_depth; ++ ++ struct hif_scatter_item scat_list[0]; + }; + + struct ath6kl_irq_proc_registers { +--- a/drivers/net/wireless/ath/ath6kl/sdio.c ++++ b/drivers/net/wireless/ath/ath6kl/sdio.c +@@ -348,7 +348,7 @@ static int ath6kl_sdio_alloc_prep_scat_r + int i, scat_req_sz, scat_list_sz, size; + u8 *virt_buf; + +- scat_list_sz = (n_scat_entry - 1) * sizeof(struct hif_scatter_item); ++ scat_list_sz = n_scat_entry * sizeof(struct hif_scatter_item); + scat_req_sz = sizeof(*s_req) + scat_list_sz; + + if (!virt_scat) diff --git a/queue-3.14/clk-gate-fix-bit-check-in-clk_register_gate.patch b/queue-3.14/clk-gate-fix-bit-check-in-clk_register_gate.patch new file mode 100644 index 00000000000..ae97b149a23 --- /dev/null +++ b/queue-3.14/clk-gate-fix-bit-check-in-clk_register_gate.patch @@ -0,0 +1,33 @@ +From 2e9dcdae4068460c45a308dd891be5248260251c Mon Sep 17 00:00:00 2001 +From: Sergei Shtylyov +Date: Wed, 24 Dec 2014 17:43:27 +0300 +Subject: clk-gate: fix bit # check in clk_register_gate() + +From: Sergei Shtylyov + +commit 2e9dcdae4068460c45a308dd891be5248260251c upstream. + +In case CLK_GATE_HIWORD_MASK flag is passed to clk_register_gate(), the bit # +should be no higher than 15, however the corresponding check is obviously off- +by-one. + +Fixes: 045779942c04 ("clk: gate: add CLK_GATE_HIWORD_MASK") +Signed-off-by: Sergei Shtylyov +Signed-off-by: Michael Turquette +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/clk/clk-gate.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/clk/clk-gate.c ++++ b/drivers/clk/clk-gate.c +@@ -128,7 +128,7 @@ struct clk *clk_register_gate(struct dev + struct clk_init_data init; + + if (clk_gate_flags & CLK_GATE_HIWORD_MASK) { +- if (bit_idx > 16) { ++ if (bit_idx > 15) { + pr_err("gate bit exceeds LOWORD field\n"); + return ERR_PTR(-EINVAL); + } diff --git a/queue-3.14/nfsv4-don-t-call-put_rpccred-under-the-rcu_read_lock.patch b/queue-3.14/nfsv4-don-t-call-put_rpccred-under-the-rcu_read_lock.patch new file mode 100644 index 00000000000..2315bcdfcd6 --- /dev/null +++ b/queue-3.14/nfsv4-don-t-call-put_rpccred-under-the-rcu_read_lock.patch @@ -0,0 +1,31 @@ +From 7c0af9ffb7bb4e5355470fa60b3eb711ddf226fa Mon Sep 17 00:00:00 2001 +From: Trond Myklebust +Date: Thu, 26 Feb 2015 12:54:46 -0500 +Subject: NFSv4: Don't call put_rpccred() under the rcu_read_lock() + +From: Trond Myklebust + +commit 7c0af9ffb7bb4e5355470fa60b3eb711ddf226fa upstream. + +put_rpccred() can sleep. + +Fixes: 8f649c3762547 ("NFSv4: Fix the locking in nfs_inode_reclaim_delegation()") +Signed-off-by: Trond Myklebust +Signed-off-by: Greg Kroah-Hartman + +--- + fs/nfs/delegation.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/fs/nfs/delegation.c ++++ b/fs/nfs/delegation.c +@@ -161,8 +161,8 @@ void nfs_inode_reclaim_delegation(struct + &delegation->flags); + NFS_I(inode)->delegation_state = delegation->type; + spin_unlock(&delegation->lock); +- put_rpccred(oldcred); + rcu_read_unlock(); ++ put_rpccred(oldcred); + trace_nfs4_reclaim_delegation(inode, res->delegation_type); + } else { + /* We appear to have raced with a delegation return. */ diff --git a/queue-3.14/series b/queue-3.14/series index 33e730b6b9d..58ffef0c804 100644 --- a/queue-3.14/series +++ b/queue-3.14/series @@ -89,3 +89,8 @@ drm-radeon-use-drm_mode_vrefresh-rather-than-mode-vrefresh.patch drm-radeon-fix-1-rb-harvest-config-setup-for-tn-rl.patch efi-small-leak-on-error-in-runtime-map-code.patch acpi-video-load-the-module-even-if-acpi-is-disabled.patch +nfsv4-don-t-call-put_rpccred-under-the-rcu_read_lock.patch +asoc-omap-pcm-correct-dma-mask.patch +ath5k-fix-spontaneus-ar5312-freezes.patch +ath6kl-fix-struct-hif_scatter_req-list-handling.patch +clk-gate-fix-bit-check-in-clk_register_gate.patch