linux/sound/soc
강신형 aa9ff6a495
ASoC: soc-compress: Reposition and add pcm_mutex
If panic_on_warn is set and compress stream(DPCM) is started,
then kernel panic occurred because card->pcm_mutex isn't held appropriately.
In the following functions, warning were issued at this line
"snd_soc_dpcm_mutex_assert_held".

static int dpcm_be_connect(struct snd_soc_pcm_runtime *fe,
		struct snd_soc_pcm_runtime *be, int stream)
{
	...
	snd_soc_dpcm_mutex_assert_held(fe);
	...
}

void dpcm_be_disconnect(struct snd_soc_pcm_runtime *fe, int stream)
{
	...
	snd_soc_dpcm_mutex_assert_held(fe);
	...
}

void snd_soc_runtime_action(struct snd_soc_pcm_runtime *rtd,
			    int stream, int action)
{
	...
	snd_soc_dpcm_mutex_assert_held(rtd);
	...
}

int dpcm_dapm_stream_event(struct snd_soc_pcm_runtime *fe, int dir,
	int event)
{
	...
	snd_soc_dpcm_mutex_assert_held(fe);
	...
}

These functions are called by soc_compr_set_params_fe, soc_compr_open_fe
and soc_compr_free_fe
without pcm_mutex locking. And this is call stack.

[  414.527841][ T2179] pc : dpcm_process_paths+0x5a4/0x750
[  414.527848][ T2179] lr : dpcm_process_paths+0x37c/0x750
[  414.527945][ T2179] Call trace:
[  414.527949][ T2179]  dpcm_process_paths+0x5a4/0x750
[  414.527955][ T2179]  soc_compr_open_fe+0xb0/0x2cc
[  414.527972][ T2179]  snd_compr_open+0x180/0x248
[  414.527981][ T2179]  snd_open+0x15c/0x194
[  414.528003][ T2179]  chrdev_open+0x1b0/0x220
[  414.528023][ T2179]  do_dentry_open+0x30c/0x594
[  414.528045][ T2179]  vfs_open+0x34/0x44
[  414.528053][ T2179]  path_openat+0x914/0xb08
[  414.528062][ T2179]  do_filp_open+0xc0/0x170
[  414.528068][ T2179]  do_sys_openat2+0x94/0x18c
[  414.528076][ T2179]  __arm64_sys_openat+0x78/0xa4
[  414.528084][ T2179]  invoke_syscall+0x48/0x10c
[  414.528094][ T2179]  el0_svc_common+0xbc/0x104
[  414.528099][ T2179]  do_el0_svc+0x34/0xd8
[  414.528103][ T2179]  el0_svc+0x34/0xc4
[  414.528125][ T2179]  el0t_64_sync_handler+0x8c/0xfc
[  414.528133][ T2179]  el0t_64_sync+0x1a0/0x1a4
[  414.528142][ T2179] Kernel panic - not syncing: panic_on_warn set ...

So, I reposition and add pcm_mutex to resolve lockdep error.

Signed-off-by: Shinhyung Kang <s47.kang@samsung.com>
Link: https://lore.kernel.org/r/016401d90ac4$7b6848c0$7238da40$@samsung.com
Signed-off-by: Mark Brown <broonie@kernel.org>
2023-01-27 00:55:07 +00:00
..
adi ASoC: adi: Migrate to new style legacy DAI naming flag 2022-06-27 13:16:34 +01:00
amd ASoC: Merge up 6.2 fixes 2023-01-18 15:33:51 +00:00
apple ASoC: apple: mca: Adjust timing of component unregister 2022-09-27 13:59:59 +01:00
atmel ASoC: microchip: power saving features and cleanups 2022-12-27 12:56:08 +00:00
au1x ASoC: au1x: Migrate to new style legacy DAI naming flag 2022-06-27 13:16:39 +01:00
bcm ASoC: bcm2835-i2s: Switch to use dev_err_probe() helper 2022-09-14 15:06:00 +01:00
cirrus ASoC: ep93xx: Migrate to new style legacy DAI naming flag 2022-06-27 13:16:20 +01:00
codecs ASoC: codecs: wsa88xx: remove unneeded includes 2023-01-25 12:38:41 +00:00
dwc ASoC: dwc: Migrate to new style legacy DAI naming flag 2022-06-27 13:16:35 +01:00
fsl ASoC: Merge up 6.2 fixes 2023-01-18 15:33:51 +00:00
generic ASoC: audio-graph-card: fix refcount leak of cpu_ep in __graph_for_each_link() 2022-12-07 14:19:12 +00:00
hisilicon ASoC: hisilicon: Migrate to new style legacy DAI naming flag 2022-06-27 13:16:24 +01:00
img ASoC: Refactor non_legacy_dai_naming flag 2022-06-29 16:58:08 +01:00
intel ASoC: Intel: avs: Simplify probe-component implementation 2023-01-23 13:31:01 +00:00
jz4740 ASoC: jz4740-i2s: Remove .set_sysclk() 2022-10-31 13:20:14 +00:00
kirkwood ASoC: kirkwood: enable Kirkwood driver for Armada 38x platforms 2022-10-17 12:48:28 +01:00
mediatek ASoC: mediatek: mt8188: remove some dead code 2023-01-26 17:06:33 +00:00
meson ASoC: meson: axg-pdm: Fix double word in comments 2022-10-19 12:04:28 +01:00
mxs ASoC: mxs-saif: Migrate to new style legacy DAI naming flag 2022-06-27 13:16:43 +01:00
pxa ASoC: PXA: make SND_PXA2XX_SOC_AC97 user-selectable 2023-01-12 18:37:18 +00:00
qcom ASoC: qcom: lpass-platform: Use SNDRV_DMA_TYPE_NONCOHERENT page allocation 2023-01-25 14:24:02 +00:00
rockchip ASoC: Kconfig: fix spelling of "up to" 2023-01-25 14:24:03 +00:00
samsung ASoC: samsung: i2s: add support for FSD I2S 2023-01-17 13:16:04 +00:00
sh ASoC: rsnd: adg: use __clk_get_name() instead of local clk_name[] 2022-11-28 13:04:33 +00:00
sof ASoC: SOF: ipc4-topology: use different channel mask for each sdw amp feedback 2023-01-26 13:32:46 +00:00
spear ASoC: spear: Migrate to new style legacy DAI naming flag 2022-06-27 13:16:18 +01:00
sprd
sti ASoC: sti-uniperf: Migrate to new style legacy DAI naming flag 2022-06-27 13:16:29 +01:00
stm ASoC: stm32: i2s: remove irqf_oneshot flag 2022-11-10 17:50:52 +00:00
sunxi ASoC: sunxi: use devm_platform_get_and_ioremap_resource() 2022-11-14 11:30:31 +00:00
tegra ASoC: Kconfig: fix spelling of "up to" 2023-01-25 14:24:03 +00:00
ti ASoC: ti: davinci-mcasp: Use DIV_ROUND_UP() instead of open-coding it 2022-10-17 12:48:23 +01:00
uniphier ASoC: uniphier: aio-core: Make some read-only arrays static const 2022-12-05 14:05:40 +00:00
ux500 ASoC: ux500: remove stedma40 references 2023-01-20 12:05:57 +00:00
xilinx ASoC: xilinx: Suppress second error message about reset failure in .remove() 2022-07-05 16:44:31 +01:00
xtensa ASoC: xtensa: Migrate to new style legacy DAI naming flag 2022-06-27 13:16:33 +01:00
Kconfig ASoC: apple: mca: Start new platform driver 2022-08-25 13:51:34 +01:00
Makefile ASoC: apple: mca: Start new platform driver 2022-08-25 13:51:34 +01:00
soc-ac97.c ASoC: Variable type completion 2022-08-17 13:00:27 +01:00
soc-acpi.c
soc-card.c
soc-component.c Revert "ASoC: soc-component: using pm_runtime_resume_and_get instead of pm_runtime_get_sync" 2022-10-04 14:09:30 +01:00
soc-compress.c ASoC: soc-compress: Reposition and add pcm_mutex 2023-01-27 00:55:07 +00:00
soc-core.c ASoC: Merge up fixes 2022-11-29 12:55:51 +00:00
soc-dai.c ASoC: soc-dai: Do not call snd_soc_link_be_hw_params_fixup() twice 2022-11-23 11:10:43 +00:00
soc-dapm.c ASoC: Merge up fixes 2022-11-29 12:55:51 +00:00
soc-devres.c
soc-generic-dmaengine-pcm.c ASoC: soc.h: remove num_cpus/codecs 2022-09-20 12:19:30 +01:00
soc-jack.c
soc-link.c
soc-ops.c ASoC: ops: Correct bounds check for second channel on SX controls 2022-11-25 16:29:33 +00:00
soc-pcm.c ASoC: soc-pcm.c: Clear DAIs parameters after stream_active is updated 2022-12-07 20:05:16 +00:00
soc-topology-test.c ASoC: topology: KUnit: Remove now redundant non_legacy_dai_naming flag 2022-06-27 13:16:54 +01:00
soc-topology.c ASoC: soc-core.c: setup rtd->pmdown_time at soc_new_pcm_runtime() 2022-09-19 17:52:41 +01:00
soc-utils-test.c ASoC: soc-utils-test: Add test for snd_soc_params_to_bclk() 2022-08-17 15:19:14 +01:00
soc-utils.c ASoC: soc-utils: Remove __exit for snd_soc_util_exit() 2022-11-07 13:37:04 +00:00