Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -116,18 +116,20 @@ struct snd_soc_dai_driver sst_platform_dai[] = {
static inline void sst_set_stream_status(struct sst_runtime_stream *stream,
					int state)
{
	spin_lock(&stream->status_lock);
	unsigned long flags;
	spin_lock_irqsave(&stream->status_lock, flags);
	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)
{
	int state;
	unsigned long flags;

	spin_lock(&stream->status_lock);
	spin_lock_irqsave(&stream->status_lock, flags);
	state = stream->stream_status;
	spin_unlock(&stream->status_lock);
	spin_unlock_irqrestore(&stream->status_lock, flags);
	return state;
}