diff options
author | Takashi Iwai <tiwai@suse.de> | 2017-02-02 15:00:12 +0300 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2017-02-03 19:36:13 +0300 |
commit | 313d9f28c1d5e0254ca16f2df0f1b737e30c0993 (patch) | |
tree | f028fc66be246aa44c34f016ad7af7d0e7791ffe /sound/x86/intel_hdmi_audio.h | |
parent | 7d9e79869ba2a8a552f4c2cf1df44cf9a0822f02 (diff) | |
download | linux-313d9f28c1d5e0254ca16f2df0f1b737e30c0993.tar.xz |
ALSA: x86: Properly manage PCM substream lifetype
The PCM substream is referred not only in the PCM callbacks but also
in the irq handler and in the hotplug/unplug codes. The latter code
paths don't take the PCM lock, thus the PCM may be released
unexpectedly while calling PCM helper functions or accessing
pcm->runtime fields.
This patch implements a simple refcount to assure the PCM substream
accessibility while the other codes are accessing. It needed some
code refactoring in the relevant functions for avoiding the doubly
spinlocks.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/x86/intel_hdmi_audio.h')
-rw-r--r-- | sound/x86/intel_hdmi_audio.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sound/x86/intel_hdmi_audio.h b/sound/x86/intel_hdmi_audio.h index 7bd273ec3275..6e5a1978e9c7 100644 --- a/sound/x86/intel_hdmi_audio.h +++ b/sound/x86/intel_hdmi_audio.h @@ -72,9 +72,10 @@ #define AUD_CONFIG_CH_MASK 0x70 struct pcm_stream_info { - struct snd_pcm_substream *had_substream; + struct snd_pcm_substream *substream; u64 buffer_rendered; u32 ring_buf_size; + int substream_refcount; }; struct ring_buf_info { |