lkml.org 
[lkml]   [2019]   [Aug]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.2 054/135] ALSA: pcm: fix lost wakeup event scenarios in snd_pcm_drain
    Date
    From: Yuki Tsunashima <ytsunashima@jp.adit-jv.com>

    [ Upstream commit 37151a41df800493cfcbbef4f7208ffe04feb959 ]

    lost wakeup can occur after enabling irq, therefore put task
    into interruptible before enabling interrupts,

    without this change, task can be put to sleep and snd_pcm_drain
    will delay

    Fixes: f2b3614cefb6 ("ALSA: PCM - Don't check DMA time-out too shortly")
    Signed-off-by: Yuki Tsunashima <ytsunashima@jp.adit-jv.com>
    Signed-off-by: Suresh Udipi <sudipi@jp.adit-jv.com>
    [ported from 4.9]
    Signed-off-by: Adam Miartus <amiartus@de.adit-jv.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/core/pcm_native.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
    index 12dd9b318db18..703857aab00fc 100644
    --- a/sound/core/pcm_native.c
    +++ b/sound/core/pcm_native.c
    @@ -1873,6 +1873,7 @@ static int snd_pcm_drain(struct snd_pcm_substream *substream,
    if (!to_check)
    break; /* all drained */
    init_waitqueue_entry(&wait, current);
    + set_current_state(TASK_INTERRUPTIBLE);
    add_wait_queue(&to_check->sleep, &wait);
    snd_pcm_stream_unlock_irq(substream);
    if (runtime->no_period_wakeup)
    @@ -1885,7 +1886,7 @@ static int snd_pcm_drain(struct snd_pcm_substream *substream,
    }
    tout = msecs_to_jiffies(tout * 1000);
    }
    - tout = schedule_timeout_interruptible(tout);
    + tout = schedule_timeout(tout);

    snd_pcm_stream_lock_irq(substream);
    group = snd_pcm_stream_group_ref(substream);
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-08-22 19:17    [W:2.898 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site