From cddd4591404fb4c53dc0b3c0b15b942cdbed4356 Mon Sep 17 00:00:00 2001 From: Yangbo Lu Date: Fri, 10 Apr 2020 10:47:05 +0800 Subject: layerscape: add patches-5.4 Add patches for linux-5.4. The patches are from NXP LSDK-20.04 release which was tagged LSDK-20.04-V5.4. https://source.codeaurora.org/external/qoriq/qoriq-components/linux/ For boards LS1021A-IOT, and Traverse-LS1043 which are not involved in LSDK, port the dts patches from 4.14. The patches are sorted into the following categories: 301-arch-xxxx 302-dts-xxxx 303-core-xxxx 701-net-xxxx 801-audio-xxxx 802-can-xxxx 803-clock-xxxx 804-crypto-xxxx 805-display-xxxx 806-dma-xxxx 807-gpio-xxxx 808-i2c-xxxx 809-jailhouse-xxxx 810-keys-xxxx 811-kvm-xxxx 812-pcie-xxxx 813-pm-xxxx 814-qe-xxxx 815-sata-xxxx 816-sdhc-xxxx 817-spi-xxxx 818-thermal-xxxx 819-uart-xxxx 820-usb-xxxx 821-vfio-xxxx Signed-off-by: Yangbo Lu --- ...ma-fsl-edma-v3-Fix-RCU-issue-while-playin.patch | 65 ++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 target/linux/layerscape/patches-5.4/806-dma-0011-MLK-16482-dma-fsl-edma-v3-Fix-RCU-issue-while-playin.patch (limited to 'target/linux/layerscape/patches-5.4/806-dma-0011-MLK-16482-dma-fsl-edma-v3-Fix-RCU-issue-while-playin.patch') diff --git a/target/linux/layerscape/patches-5.4/806-dma-0011-MLK-16482-dma-fsl-edma-v3-Fix-RCU-issue-while-playin.patch b/target/linux/layerscape/patches-5.4/806-dma-0011-MLK-16482-dma-fsl-edma-v3-Fix-RCU-issue-while-playin.patch new file mode 100644 index 0000000000..de37310dd0 --- /dev/null +++ b/target/linux/layerscape/patches-5.4/806-dma-0011-MLK-16482-dma-fsl-edma-v3-Fix-RCU-issue-while-playin.patch @@ -0,0 +1,65 @@ +From 46c343673c6eae7909f644f9b67101ce14309670 Mon Sep 17 00:00:00 2001 +From: Robin Gong +Date: Tue, 19 Sep 2017 11:36:58 +0800 +Subject: [PATCH] MLK-16482: dma: fsl-edma-v3: Fix RCU issue while playing + Audio + +That's caused by commit 593034f1b908 ("MLK-16437: dma: fsl-edma-v3: +fix kernel crash while edma interrupt trigger after channel disabled"). +Because fsl_chan->vchan.lock will be hold always and trigger RCU report +as below: + +1571.3 Playing WAVE '/mnt/nfs/vte_mx82/../test_stream/esai_stream/48k16bit-six.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Channels 6 +1571.5 [ 4642.698771] INFO: rcu_preempt detected stalls on CPUs/tasks: +1571.6 [ 4642.704443] 0-...: (1 GPs behind) idle=2c5/140000000000000/0 softirq=155373/155374 fqs=2541 +1571.7 [ 4642.712967] (detected by 2, t=5252 jiffies, g=104259, c=104258, q=22) +1571.8 [ 4642.719501] Task dump for CPU 0: +1571.9 [ 4642.722724] aplay R running task 0 15723 15721 0x00000202 +1571.10 [ 4642.729786] Call trace: +1571.11 [ 4642.732239] [] __switch_to+0x8c/0xa0 +1571.12 [ 4642.737379] [] dma_chan_put+0x70/0xa0 +1571.13 [ 4642.742603] [] dma_release_channel+0x34/0xa0 +1571.14 [ 4642.748435] [] fsl_asrc_dma_hw_free+0x38/0x50 +1571.15 [ 4642.754358] [] soc_pcm_hw_free+0x110/0x1a8 +1571.16 [ 4642.760013] [] dpcm_fe_dai_hw_free+0x6c/0xe0 +1571.17 [ 4642.765844] [] snd_pcm_common_ioctl1+0xb40/0xce0 +1571.18 [ 4642.772028] [] snd_pcm_playback_ioctl1+0x1dc/0x310 +1571.19 [ 4642.778378] [] snd_pcm_playback_ioctl+0x28/0x40 +1571.20 [ 4642.784470] [] do_vfs_ioctl+0xa4/0x748 +1571.21 [ 4642.789784] [] SyS_ioctl+0x8c/0xa0 +1571.22 [ 4642.794745] [] __sys_trace_return+0x0/0x4 +1571.23 [ 4705.718740] INFO: rcu_preempt detected stalls on CPUs/tasks: +1571.24 [ 4705.724420] 0-...: (1 GPs behind) idle=2c5/140000000000000/0 softirq=155373/155374 fqs=10407 +1571.25 [ 4705.733030] (detected by 1, t=21010 jiffies, g=104259, c=104258, q=119) + +Signed-off-by: Robin Gong +Reported-by: Jason Liu +Reviewed-by: Daniel Baluta +Fixes: 593034f1b908 ("MLK-16437: dma: fsl-edma-v3: fix kernel crash +while edma interrupt trigger after channel disabled"). + +(cherry picked from commit e62e8707154f47e168fcfd148e97be4e2f991898) +--- + drivers/dma/fsl-edma-v3.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/dma/fsl-edma-v3.c ++++ b/drivers/dma/fsl-edma-v3.c +@@ -692,7 +692,7 @@ static irqreturn_t fsl_edma3_tx_handler( + + /* Ignore this interrupt since channel has been disabled already */ + if (!fsl_chan->edesc) +- return IRQ_HANDLED; ++ goto irq_handled; + + if (!fsl_chan->edesc->iscyclic) { + fsl_edma3_get_realcnt(fsl_chan); +@@ -706,7 +706,7 @@ static irqreturn_t fsl_edma3_tx_handler( + + if (!fsl_chan->edesc) + fsl_edma3_xfer_desc(fsl_chan); +- ++irq_handled: + spin_unlock(&fsl_chan->vchan.lock); + + return IRQ_HANDLED; -- cgit v1.2.3