提交 d89b0a13 编写于 作者: L Lu Guanqun 提交者: 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: NLu Guanqun <guanqun.lu@intel.com>
Acked-by: NLiam Girdwood <lrg@ti.com>
Signed-off-by: NMark Brown <broonie@opensource.wolfsonmicro.com>
上级 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% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册