linux/sound/soc/samsung
Charles Keepax 316fa9e09a ASoC: samsung: Use IRQ safe spin lock calls
Lockdep warns of a potential lock inversion, i2s->lock is held numerous
times whilst we are under the substream lock (snd_pcm_stream_lock). If
we use the IRQ unsafe spin lock calls, you can also end up locking
snd_pcm_stream_lock whilst under i2s->lock (if an IRQ happens whilst we
are holding i2s->lock). This could result in deadlock.

[   18.147001]        CPU0                    CPU1
[   18.151509]        ----                    ----
[   18.156022]   lock(&(&pri_dai->spinlock)->rlock);
[   18.160701]                                local_irq_disable();
[   18.166622]                                lock(&(&substream->self_group.lock)->rlock);
[   18.174595]                                lock(&(&pri_dai->spinlock)->rlock);
[   18.181806]   <Interrupt>
[   18.184408]     lock(&(&substream->self_group.lock)->rlock);
[   18.190045]
[   18.190045]  *** DEADLOCK ***

This patch changes to using the irq safe spinlock calls, to avoid this
issue.

Fixes: ce8bcdbb61 ("ASoC: samsung: i2s: Protect more registers with a spinlock")
Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Tested-by: Anand Moon <linux.amoon@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org
2016-02-20 00:29:19 +09:00
..
ac97.c ASoC: samsung: pass filter function as pointer 2015-11-21 13:27:22 +00:00
arndale_rt5631.c Merge remote-tracking branches 'asoc/topic/au1x', 'asoc/topic/bcm2835', 'asoc/topic/blackfin' and 'asoc/topic/card' into asoc-next 2015-08-30 15:52:41 +01:00
bells.c ASoC: Vendor drivers get a link's runtime by snd_soc_get_pcm_runtime() 2015-11-18 18:32:24 +00:00
dma.h ASoC: samsung: pass filter function as pointer 2015-11-21 13:27:22 +00:00
dmaengine.c ASoC: samsung: pass filter function as pointer 2015-11-21 13:27:22 +00:00
h1940_uda1380.c ASoC: h1940_uda1380: Constify rate constraints 2015-10-23 08:49:03 +09:00
i2s-regs.h ASoC: samsung: add support for exynos7 I2S controller 2014-11-07 10:41:22 +00:00
i2s.c ASoC: samsung: Use IRQ safe spin lock calls 2016-02-20 00:29:19 +09:00
i2s.h ASoC: samsung: Allow setting OP_CLK of the IIS Multi Audio Interface 2014-05-20 23:20:57 +01:00
idma.c ASoC: samsung: drop owner assignment from platform_drivers 2014-10-20 16:22:13 +02:00
idma.h ASoC: Fix __iomem annotation for IDMA registers 2011-11-29 17:28:16 +00:00
jive_wm8750.c ASoC: jive: Automatically disconnect non-connected pins 2015-01-16 16:59:08 +00:00
Kconfig ASoC: samsung: pass filter function as pointer 2015-11-21 13:27:22 +00:00
littlemill.c ASoC: Vendor drivers get a link's runtime by snd_soc_get_pcm_runtime() 2015-11-18 18:32:24 +00:00
ln2440sbc_alc650.c ASoC: Samsung: Do not register samsung audio dma device as pdev 2012-12-07 19:36:07 +09:00
lowland.c ASoC: lowland: Use card DAPM context to access widgets 2015-05-04 13:51:19 +01:00
Makefile ASoC: samsung: Remove goni or aquila with the WM8994 2015-02-07 07:53:07 +08:00
neo1973_wm8753.c ASoC: neo1973_wm8753: Use static DAI format setup 2015-01-06 17:34:30 +00:00
odroidx2_max98090.c ASoC: Vendor drivers get a link's runtime by snd_soc_get_pcm_runtime() 2015-11-18 18:32:24 +00:00
pcm.c ASoC: samsung: pass filter function as pointer 2015-11-21 13:27:22 +00:00
pcm.h
regs-ac97.h ASoC: samsung: Trivial cleanups in header files 2013-12-30 12:05:56 +00:00
regs-i2s-v2.h
regs-iis.h ASoC: samsung: Trivial cleanups in header files 2013-12-30 12:05:56 +00:00
rx1950_uda1380.c ASoC: rx1950_uda1380: Constify rate constraints 2015-10-23 08:49:16 +09:00
s3c24xx_simtec_hermes.c ASoC: samsung: drop owner assignment from platform_drivers 2014-10-20 16:22:13 +02:00
s3c24xx_simtec_tlv320aic23.c ASoC: samsung: drop owner assignment from platform_drivers 2014-10-20 16:22:13 +02:00
s3c24xx_simtec.c ASoC: s3c24xx_simtec: Use static DAI format setup 2015-01-06 17:34:30 +00:00
s3c24xx_simtec.h
s3c24xx_uda134x.c ASoC: s3c24xx_uda134x: Use static DAI format setup 2015-01-06 17:34:31 +00:00
s3c24xx-i2s.c ASoC: samsung: pass filter function as pointer 2015-11-21 13:27:22 +00:00
s3c24xx-i2s.h
s3c2412-i2s.c ASoC: samsung: pass filter function as pointer 2015-11-21 13:27:22 +00:00
s3c2412-i2s.h
s3c-i2s-v2.c ASoC: samsung: remove unused DMA data 2014-07-14 19:53:43 +01:00
s3c-i2s-v2.h ASoC: switch over to use snd_soc_register_component() on s3c i2s 2013-03-26 21:57:31 +00:00
smartq_wm8987.c ASoC: samsung/smartq: use dynamic registration 2015-12-01 21:50:24 +01:00
smdk2443_wm9710.c ASoC: Samsung: Do not register samsung audio dma device as pdev 2012-12-07 19:36:07 +09:00
smdk_spdif.c ASoC: Samsung: Do not register samsung audio dma device as pdev 2012-12-07 19:36:07 +09:00
smdk_wm8580.c ASoC: smdk_wm8580: Pass card DAPM context to snd_soc_dapm_disable_pin() 2015-01-16 16:59:36 +00:00
smdk_wm8580pcm.c ASoC: smdk_wm8570pcm: Use static DAI format setup 2015-01-06 17:34:32 +00:00
smdk_wm8994.c ASoC: smdk_wm8994: Use card DAPM context to access widgets 2015-05-04 13:51:19 +01:00
smdk_wm8994pcm.c ASoC: smdk_wm8994pcm: Use static DAI format setup 2015-01-06 17:34:32 +00:00
smdk_wm9713.c ASoC: Samsung: Do not register samsung audio dma device as pdev 2012-12-07 19:36:07 +09:00
snow.c ASoC: Vendor drivers get a link's runtime by snd_soc_get_pcm_runtime() 2015-11-18 18:32:24 +00:00
spdif.c ASoC: samsung: pass filter function as pointer 2015-11-21 13:27:22 +00:00
spdif.h
speyside.c ASoC: Vendor drivers get a link's runtime by snd_soc_get_pcm_runtime() 2015-11-18 18:32:24 +00:00
tobermory.c ASoC: Vendor drivers get a link's runtime by snd_soc_get_pcm_runtime() 2015-11-18 18:32:24 +00:00