linux_dsm_epyc7002/sound/soc
Tzung-Bi Shih 08df0d9a00
ASoC: max98090: revert "ASoC: max98090: fix lockdep warning"
Commit 2dc98af62c ("ASoC: max98090: fix lockdep warning") introduced
a helpful-less small lock: shdn_lock.  Reverts the commit.

Reasons:

1. Lockdep should not be happy by either the original or current code.
From lockdep's point of view, there is a lock inversion anyway.

Let d = dapm_mutex, c = controls_rwsem, s = shdn_lock,

From the reported calling stack: lock acquisition order of
snd_soc_register_card() is: d -> c.
> snd_ctl_add_replace+0x3c/0x84
> dapm_create_or_share_kcontrol+0x24c/0x2e0
> snd_soc_dapm_new_widgets+0x308/0x594
> snd_soc_bind_card+0x80c/0xad4
> devm_snd_soc_register_card+0x34/0x6c

If calling snd_soc_dapm_put_enum_double() in kcontrol's put (e.g.
SOC_DAPM_ENUM_EXT), lock acquisition order is: c -> d.  Note that,
snd_soc_dapm_put_enum_double() acquires d.

The possible lock inversion is always there if registering sound card
and putting mixer control happen at the same time.  In fact, it never
happens because the control device don't show up to the userspace until
the sound card build success.

Commit 2dc98af62c ("ASoC: max98090: fix lockdep warning") changes the
order to: c -> s -> d.  The lock inversion is still there.

2. Commit 62d5ae4caf ("ASoC: max98090: save and restore SHDN when
changing sensitive registers SHDN bit") designed to use dapm_mutex to
protect SHDN bit.  Use a separate lock breaks the protection.

DAPM changes SHDN bit automatically when it finds the path.  Thus, any
code wants to change the SHDN bit, need to acquire the dapm_mutex first.

> SND_SOC_DAPM_SUPPLY("SHDN", M98090_REG_DEVICE_SHUTDOWN,
>        M98090_SHDNN_SHIFT, 0, NULL, 0),

Fixes: 2dc98af62c ("ASoC: max98090: fix lockdep warning")
Signed-off-by: Tzung-Bi Shih <tzungbi@google.com>
Link: https://lore.kernel.org/r/20200117073814.82441-2-tzungbi@google.com
Signed-off-by: Mark Brown <broonie@kernel.org>
2020-01-21 17:14:33 +00:00
..
adi treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 177 2019-05-30 11:29:19 -07:00
amd ASoC: amd: Additional DAI for I2S SP instance. 2020-01-17 15:31:24 +00:00
atmel ASoC: atmel: atmel_ssc_dai: move .suspend/.resume to component 2020-01-21 17:03:15 +00:00
au1x ASoC: soc-core: remove bus_control 2020-01-21 17:07:08 +00:00
bcm ASoC: bcm: cygnus-ssp: move .suspend/.resume to component 2020-01-21 17:02:56 +00:00
cirrus ASoC: soc-core: remove bus_control 2020-01-21 17:07:08 +00:00
codecs ASoC: max98090: revert "ASoC: max98090: fix lockdep warning" 2020-01-21 17:14:33 +00:00
dwc ASoC: dwc: dwc-i2s: move .suspend/.resume to component 2020-01-21 17:05:35 +00:00
fsl ASoC: soc-core: remove bus_control 2020-01-21 17:07:08 +00:00
generic ASoC: simple-card: Don't create separate link when platform is present 2019-12-10 13:10:40 +00:00
hisilicon treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 340 2019-06-05 17:37:07 +02:00
img treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 422 2019-06-05 17:37:15 +02:00
intel ASoC: Intel: cht_bsw_rt5645: Remove unnecessary string buffers and snprintf calls 2020-01-17 15:42:04 +00:00
jz4740 ASoC: jz4740: jz4740-i2s: move .suspend/.resume to component 2020-01-21 17:03:32 +00:00
kirkwood ASoC: kirkwood: Drop superfluous ioctl PCM ops 2019-12-11 15:57:19 +00:00
mediatek ASoC: mediatek: move .suspend/.resume to component 2020-01-21 17:03:54 +00:00
meson ASoC: meson: axg-fifo: relax period size constraints 2019-12-18 20:01:34 +00:00
mxs ASoC: Remove dev_err() usage after platform_get_irq() 2019-08-02 12:12:31 +01:00
pxa ASoC: soc-core: remove bus_control 2020-01-21 17:07:08 +00:00
qcom ASoC: qdsp6: q6asm-dai: constify copied structure 2020-01-01 21:38:48 +00:00
rockchip ASoC: Fixes for v5.4 2019-11-07 13:52:17 +01:00
samsung ASoC: samsung: i2s: move .suspend/.resume to component 2020-01-21 17:05:54 +00:00
sh ASoC: soc-core: remove bus_control 2020-01-21 17:07:08 +00:00
sirf ASoC: sirf: use devm_platform_ioremap_resource() to simplify code 2019-07-31 12:05:39 +01:00
sof ASoC: Fixes for v5.5 2020-01-17 15:38:56 +00:00
spear ASoC: spear: use devm_platform_ioremap_resource() to simplify code 2019-07-31 12:06:18 +01:00
sprd ASoC: sprd: Drop superfluous ioctl PCM ops 2019-12-11 15:59:40 +00:00
sti ASoC: sti: sti_uniperif: move .suspend/.resume to component 2020-01-21 17:04:37 +00:00
stm ASoC: Fixes for v5.5 2020-01-17 15:38:56 +00:00
sunxi ASoC: sunxi: sun4i-codec: remove unneeded semicolon 2019-10-28 13:12:39 +00:00
tegra ASoC: soc-core: remove bus_control 2020-01-21 17:07:08 +00:00
ti ASoC: ti: omap-mcpdm: move .suspend/.resume to component 2020-01-21 17:04:57 +00:00
txx9 ASoC: soc-core: remove bus_control 2020-01-21 17:07:08 +00:00
uniphier ASoC: uniphier: move .suspend/.resume to component 2020-01-21 17:05:16 +00:00
ux500 ASoC: ux500: ux500_msp_dai: remove unused DAI .suspend/.resume 2020-01-21 17:06:13 +00:00
xilinx ASoC: xilinx: Use managed buffer allocation 2019-12-11 16:43:25 +00:00
xtensa ASoC: xtensa: Use managed buffer allocation 2019-12-11 16:43:26 +00:00
zte sound: Fix Kconfig indentation 2019-10-07 03:53:03 +02:00
Kconfig ASoC: remove w90x900/nuc900 platform drivers 2019-08-12 14:00:29 +01:00
Makefile ASoC: remove w90x900/nuc900 platform drivers 2019-08-12 14:00:29 +01:00
soc-ac97.c
soc-acpi.c ASoC: soc-acpi: fix implicit header use of module.h/export.h 2019-05-08 18:06:28 +09:00
soc-component.c ASoC: soc-core: remove snd_soc_rtdcom_list 2020-01-10 13:31:22 +00:00
soc-compress.c ASoC: soc-pcm/soc-compress: use snd_soc_dapm_stream_stop() for SND_SOC_DAPM_STREAM_STOP 2020-01-10 13:34:19 +00:00
soc-core.c ASoC: soc-core: remove bus_control 2020-01-21 17:07:08 +00:00
soc-dai.c ASoC: soc-core: remove DAI suspend/resume 2020-01-21 17:06:41 +00:00
soc-dapm.c ASoC: soc-dapm: add snd_soc_dapm_stream_stop() 2020-01-10 13:33:53 +00:00
soc-devres.c
soc-generic-dmaengine-pcm.c ASoC: generic-dmaengine-pcm: Use managed buffer allocation 2019-12-11 16:43:23 +00:00
soc-io.c
soc-jack.c ASoC: Jack: Fix NULL pointer dereference in snd_soc_jack_report 2019-11-12 17:12:56 +00:00
soc-ops.c ASoC: soc-ops: use snd_soc_card_get_kcontrol() at snd_soc_limit_volume() 2019-10-03 14:37:20 +01:00
soc-pcm.c ASoC: soc-pcm/soc-compress: use snd_soc_dapm_stream_stop() for SND_SOC_DAPM_STREAM_STOP 2020-01-10 13:34:19 +00:00
soc-topology.c ASoC: soc-topology: fix endianness issues 2020-01-03 00:57:57 +00:00
soc-utils.c ASoC: utils: Drop superfluous ioctl PCM ops 2019-12-11 16:00:48 +00:00