Commit d89b0a13 authored by Lu Guanqun's avatar Lu Guanqun Committed by Mark Brown

ASoC: sst_platform: Fix lock acquring

Fix the possible dead lock shown below:

spin_lock
sst_get_stream_status
sst_period_elapsed
intel_sst_interrupt
handle_IRQ_event
handle_fasteoi_irq
do_IRQ
common_interrupt
spin_lock
sst_set_stream_status
sst_platform_pcm_trigger
Signed-off-by: default avatarLu Guanqun <guanqun.lu@intel.com>
Acked-by: default avatarLiam Girdwood <lrg@ti.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent d985f27e
...@@ -116,18 +116,20 @@ struct snd_soc_dai_driver sst_platform_dai[] = { ...@@ -116,18 +116,20 @@ struct snd_soc_dai_driver sst_platform_dai[] = {
static inline void sst_set_stream_status(struct sst_runtime_stream *stream, static inline void sst_set_stream_status(struct sst_runtime_stream *stream,
int state) int state)
{ {
spin_lock(&stream->status_lock); unsigned long flags;
spin_lock_irqsave(&stream->status_lock, flags);
stream->stream_status = state; stream->stream_status = state;
spin_unlock(&stream->status_lock); spin_unlock_irqrestore(&stream->status_lock, flags);
} }
static inline int sst_get_stream_status(struct sst_runtime_stream *stream) static inline int sst_get_stream_status(struct sst_runtime_stream *stream)
{ {
int state; int state;
unsigned long flags;
spin_lock(&stream->status_lock); spin_lock_irqsave(&stream->status_lock, flags);
state = stream->stream_status; state = stream->stream_status;
spin_unlock(&stream->status_lock); spin_unlock_irqrestore(&stream->status_lock, flags);
return state; return state;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment