A few ALSA control API helpers like snd_ctl_rename(), snd_ctl_remove() and snd_ctl_find_*() suppose the callers taking card->controls_rwsem. But it's error-prone and fragile. This patch set tries to change those API functions to take the card->controls>rwsem internally by themselves, so that the drivers don't need to take care of lockings.
After applying this patch set, only a couple of places still touch card->controls_rwsem (which are OK-ish as they need for traversing the control linked list).
Takashi
===
Takashi Iwai (11): ALSA: control: Take card->controls_rwsem in snd_ctl_rename() staging: greybus: audio_helper: Use snd_ctl_remove_id() ASoC: atmel: mchp-pdmc: Use snd_ctl_remove_id() ALSA: control: Take controls_rwsem lock in snd_ctl_remove() ALSA: control: Add lockdep warning to internal functions ASoC: sigmadsp: Simplify with snd_ctl_activate_id() staging: greybus: Avoid abusing controls_rwsem ALSA: control: Make snd_ctl_find_id() argument const ALSA: control: Introduce unlocked version for snd_ctl_find_*() helpers ALSA: control: Take lock in snd_ctl_find_id() and snd_ctl_find_numid() ALSA: emu10k1: Go back and simplify with snd_ctl_find_id()
drivers/staging/greybus/audio_codec.c | 18 ++-- drivers/staging/greybus/audio_codec.h | 1 + drivers/staging/greybus/audio_helper.c | 20 +--- include/sound/control.h | 6 +- sound/core/control.c | 126 ++++++++++++++++++++----- sound/core/control_compat.c | 2 +- sound/core/control_led.c | 2 +- sound/core/jack.c | 2 - sound/core/oss/mixer_oss.c | 10 +- sound/core/pcm.c | 2 - sound/isa/sb/emu8000.c | 2 - sound/isa/sb/sb16_csp.c | 2 - sound/pci/emu10k1/emufx.c | 5 - sound/pci/hda/hda_codec.c | 2 - sound/soc/atmel/mchp-pdmc.c | 12 +-- sound/soc/codecs/sigmadsp.c | 25 +---- sound/soc/soc-topology.c | 3 - 17 files changed, 129 insertions(+), 111 deletions(-)