diff options
author | Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> | 2021-09-24 14:24:17 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2021-09-28 10:22:51 +0200 |
commit | a20f3b10de61add5e14b6ce4df982f4df2a4cbbc (patch) | |
tree | 843533aa2da3d3fce4f0fd4b94c3b8dcb6e857eb /sound | |
parent | 868ddfcef31ff93ea8961b2e81ea7fe12f6f144b (diff) | |
download | linux-a20f3b10de61add5e14b6ce4df982f4df2a4cbbc.tar.bz2 |
ASoC: SOF: Intel: hda-dai: fix potential locking issue
The initial hdac_stream code was adapted a third time with the same
locking issues. Move the spin_lock outside the loops and make sure the
fields are protected on read/write.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Acked-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20210924192417.169243-5-pierre-louis.bossart@linux.intel.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/sof/intel/hda-dai.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/sound/soc/sof/intel/hda-dai.c b/sound/soc/sof/intel/hda-dai.c index c1f9f0f58464..6704dbcd101c 100644 --- a/sound/soc/sof/intel/hda-dai.c +++ b/sound/soc/sof/intel/hda-dai.c @@ -68,6 +68,7 @@ static struct hdac_ext_stream * return NULL; } + spin_lock_irq(&bus->reg_lock); list_for_each_entry(stream, &bus->stream_list, list) { struct hdac_ext_stream *hstream = stream_to_hdac_ext_stream(stream); @@ -107,12 +108,12 @@ static struct hdac_ext_stream * * is updated in snd_hdac_ext_stream_decouple(). */ if (!res->decoupled) - snd_hdac_ext_stream_decouple(bus, res, true); - spin_lock_irq(&bus->reg_lock); + snd_hdac_ext_stream_decouple_locked(bus, res, true); + res->link_locked = 1; res->link_substream = substream; - spin_unlock_irq(&bus->reg_lock); } + spin_unlock_irq(&bus->reg_lock); return res; } |