| From 065dcb8770186ead2575e121d081e9a14ecab49a Mon Sep 17 00:00:00 2001 |
| From: Charles Keepax <ckeepax@opensource.cirrus.com> |
| Date: Mon, 22 Jul 2019 10:24:36 +0100 |
| Subject: ALSA: compress: Be more restrictive about when a drain is allowed |
| |
| [ Upstream commit 3b8179944cb0dd53e5223996966746cdc8a60657 ] |
| |
| Draining makes little sense in the situation of hardware overrun, as the |
| hardware will have consumed all its available samples. Additionally, |
| draining whilst the stream is paused would presumably get stuck as no |
| data is being consumed on the DSP side. |
| |
| Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> |
| Acked-by: Vinod Koul <vkoul@kernel.org> |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| sound/core/compress_offload.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c |
| index b4f1536b17cb5..2e2d184684911 100644 |
| --- a/sound/core/compress_offload.c |
| +++ b/sound/core/compress_offload.c |
| @@ -812,7 +812,10 @@ static int snd_compr_drain(struct snd_compr_stream *stream) |
| case SNDRV_PCM_STATE_OPEN: |
| case SNDRV_PCM_STATE_SETUP: |
| case SNDRV_PCM_STATE_PREPARED: |
| + case SNDRV_PCM_STATE_PAUSED: |
| return -EPERM; |
| + case SNDRV_PCM_STATE_XRUN: |
| + return -EPIPE; |
| default: |
| break; |
| } |
| @@ -861,7 +864,10 @@ static int snd_compr_partial_drain(struct snd_compr_stream *stream) |
| case SNDRV_PCM_STATE_OPEN: |
| case SNDRV_PCM_STATE_SETUP: |
| case SNDRV_PCM_STATE_PREPARED: |
| + case SNDRV_PCM_STATE_PAUSED: |
| return -EPERM; |
| + case SNDRV_PCM_STATE_XRUN: |
| + return -EPIPE; |
| default: |
| break; |
| } |
| -- |
| 2.20.1 |
| |