[alsa-devel] [PATCH] ASoC: sst_platform: Fix lock acquring
Lu Guanqun
guanqun.lu at intel.com
Fri Apr 8 09:40:42 CEST 2011
On Fri, Apr 08, 2011 at 03:38:48PM +0800, Lu Guanqun wrote:
> 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: Lu Guanqun <guanqun.lu at intel.com>
This patch is based on Mark Brown's for-2.6.40 branch. It should be
applied cleanly.
Thanks.
> ---
> sound/soc/mid-x86/sst_platform.c | 10 ++++++----
> 1 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/sound/soc/mid-x86/sst_platform.c b/sound/soc/mid-x86/sst_platform.c
> index 9ba9414..d827edb 100644
> --- a/sound/soc/mid-x86/sst_platform.c
> +++ b/sound/soc/mid-x86/sst_platform.c
> @@ -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;
> }
>
>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
--
guanqun
More information about the Alsa-devel
mailing list