mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-19 18:53:52 +08:00
ALSA: aloop: Fix Oops while PM resume
snd-aloop driver has no proper PM implementation, thus the PM resume may trigger Oops due to leftover timer instance. This patch adds the missing suspend/resume implementation. Reported-and-tested-by: El boulangero <elboulangero@gmail.com> Cc: <stable@vger.kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
20608731f4
commit
edac894389
@ -286,12 +286,14 @@ static int loopback_trigger(struct snd_pcm_substream *substream, int cmd)
|
|||||||
loopback_active_notify(dpcm);
|
loopback_active_notify(dpcm);
|
||||||
break;
|
break;
|
||||||
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
|
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
|
||||||
|
case SNDRV_PCM_TRIGGER_SUSPEND:
|
||||||
spin_lock(&cable->lock);
|
spin_lock(&cable->lock);
|
||||||
cable->pause |= stream;
|
cable->pause |= stream;
|
||||||
loopback_timer_stop(dpcm);
|
loopback_timer_stop(dpcm);
|
||||||
spin_unlock(&cable->lock);
|
spin_unlock(&cable->lock);
|
||||||
break;
|
break;
|
||||||
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
|
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
|
||||||
|
case SNDRV_PCM_TRIGGER_RESUME:
|
||||||
spin_lock(&cable->lock);
|
spin_lock(&cable->lock);
|
||||||
dpcm->last_jiffies = jiffies;
|
dpcm->last_jiffies = jiffies;
|
||||||
cable->pause &= ~stream;
|
cable->pause &= ~stream;
|
||||||
@ -563,7 +565,8 @@ static snd_pcm_uframes_t loopback_pointer(struct snd_pcm_substream *substream)
|
|||||||
static struct snd_pcm_hardware loopback_pcm_hardware =
|
static struct snd_pcm_hardware loopback_pcm_hardware =
|
||||||
{
|
{
|
||||||
.info = (SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_MMAP |
|
.info = (SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_MMAP |
|
||||||
SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_PAUSE),
|
SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_PAUSE |
|
||||||
|
SNDRV_PCM_INFO_RESUME),
|
||||||
.formats = (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE |
|
.formats = (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE |
|
||||||
SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE |
|
SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE |
|
||||||
SNDRV_PCM_FMTBIT_FLOAT_LE | SNDRV_PCM_FMTBIT_FLOAT_BE),
|
SNDRV_PCM_FMTBIT_FLOAT_LE | SNDRV_PCM_FMTBIT_FLOAT_BE),
|
||||||
|
Loading…
Reference in New Issue
Block a user