Received: by 2002:a25:b794:0:0:0:0:0 with SMTP id n20csp155236ybh; Fri, 2 Aug 2019 20:16:51 -0700 (PDT) X-Google-Smtp-Source: APXvYqw0GZ4pA+f2tDybuFmBe7etjuURIto44ap5gQWhPzJmZoWs2In/frLC5lX0ndNgs2fLh6SD X-Received: by 2002:a17:902:a413:: with SMTP id p19mr135274435plq.134.1564802211014; Fri, 02 Aug 2019 20:16:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564802211; cv=none; d=google.com; s=arc-20160816; b=BF9c9+uosL1XpcbZFFoppMvLsB0159x+FJGgg1gufykeG+dwjw6HIRHA9ffchsgzeL +wpNX0Dz02mw9DamI0BWlEkpFFxcKnJ2fr9Nk1+vdB9+CRI6GBez9/OL5gONCg8ib+5B ERn0uOonMw9sHZTnPLMNMpjSwcDEcS3FNjnH0kjfiWdI4GfxSwtCHKmr07H0XqjqpqLg j/yTSxVQ8lAehcUaS6C/4l4YX6UhJfTRoaoJuxyFGvMcz62nImsUT6HIjozuGg27LSjo WjKNyv0RvPxWloG9N7qGZhV8X52+lgLAwMZpVPgx+P2vhC58LanbnRsxKaAQO+gqVpfK 8hVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Jwq5AskZHPsB5i7/6k+bJinirbz49Lg9kxRvpyoSWso=; b=mPRddzpT9DYcVhKRgYT6ABoh0RiJJC5N286FY+eU3g0W9LJRYs1hvOzuDD1pFK9Oks ta0Qil3tAhTTRBJQvZojeEaCnBw2voHsDKWsnFiCge8jycHTDxhNy/pRvkSNa7dJqdzp rXLP9qr4OjePm40jWoPwyHllYjOa1oTj8wVJ74gJm7m6v/4Qcl82edJ73IFPj46bOC12 tTHea+aUDIsyG8zSyN8j6F5GigaWCPLBbws7sXmie76Sd7V9QdcjwBYiqbPKV6niliMs zMiVMxwt1L4PRRMiUuVKrlmEgMyiBv45aVhzq+TPwHT+twzHwLzslzC5GngTd2fS90b0 MdUQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=H7YXv4Au; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t19si39690745pfe.94.2019.08.02.20.16.35; Fri, 02 Aug 2019 20:16:51 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=H7YXv4Au; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2405289AbfHBNcw (ORCPT + 99 others); Fri, 2 Aug 2019 09:32:52 -0400 Received: from mail.kernel.org ([198.145.29.99]:34400 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2394045AbfHBNXt (ORCPT ); Fri, 2 Aug 2019 09:23:49 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 2C71021871; Fri, 2 Aug 2019 13:23:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1564752228; bh=rrYouaVCH6+g84DRzKEb/llKvyhpuHqX24pGbNCMj6Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=H7YXv4AuvOoHeKllgnqeicW5E9tPdK5Od+2ijcVA/NuosCTWd+M13LVI4o/UN7xo1 33YiucbOlK72a5Hi61/tAmh/fON8R/kiHzqsYofQY7lQy5IA4jv8/NSrzjggj2fkgo FWOFW2wgbcJR2cZiE3r+qhgDD0sb8wEivK0XLPJY= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Charles Keepax , Vinod Koul , Takashi Iwai , Sasha Levin Subject: [PATCH AUTOSEL 4.19 23/42] ALSA: compress: Fix regression on compressed capture streams Date: Fri, 2 Aug 2019 09:22:43 -0400 Message-Id: <20190802132302.13537-23-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190802132302.13537-1-sashal@kernel.org> References: <20190802132302.13537-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Charles Keepax [ Upstream commit 4475f8c4ab7b248991a60d9c02808dbb813d6be8 ] A previous fix to the stop handling on compressed capture streams causes some knock on issues. The previous fix updated snd_compr_drain_notify to set the state back to PREPARED for capture streams. This causes some issues however as the handling for snd_compr_poll differs between the two states and some user-space applications were relying on the poll failing after the stream had been stopped. To correct this regression whilst still fixing the original problem the patch was addressing, update the capture handling to skip the PREPARED state rather than skipping the SETUP state as it has done until now. Fixes: 4f2ab5e1d13d ("ALSA: compress: Fix stop handling on compressed capture streams") Signed-off-by: Charles Keepax Acked-by: Vinod Koul Signed-off-by: Takashi Iwai Signed-off-by: Sasha Levin --- include/sound/compress_driver.h | 5 +---- sound/core/compress_offload.c | 16 +++++++++++----- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/include/sound/compress_driver.h b/include/sound/compress_driver.h index e87f2d5b3cc65..127c2713b543a 100644 --- a/include/sound/compress_driver.h +++ b/include/sound/compress_driver.h @@ -171,10 +171,7 @@ static inline void snd_compr_drain_notify(struct snd_compr_stream *stream) if (snd_BUG_ON(!stream)) return; - if (stream->direction == SND_COMPRESS_PLAYBACK) - stream->runtime->state = SNDRV_PCM_STATE_SETUP; - else - stream->runtime->state = SNDRV_PCM_STATE_PREPARED; + stream->runtime->state = SNDRV_PCM_STATE_SETUP; wake_up(&stream->runtime->sleep); } diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c index 8b78ddffa509a..44e81cf302401 100644 --- a/sound/core/compress_offload.c +++ b/sound/core/compress_offload.c @@ -575,10 +575,7 @@ snd_compr_set_params(struct snd_compr_stream *stream, unsigned long arg) stream->metadata_set = false; stream->next_track = false; - if (stream->direction == SND_COMPRESS_PLAYBACK) - stream->runtime->state = SNDRV_PCM_STATE_SETUP; - else - stream->runtime->state = SNDRV_PCM_STATE_PREPARED; + stream->runtime->state = SNDRV_PCM_STATE_SETUP; } else { return -EPERM; } @@ -694,8 +691,17 @@ static int snd_compr_start(struct snd_compr_stream *stream) { int retval; - if (stream->runtime->state != SNDRV_PCM_STATE_PREPARED) + switch (stream->runtime->state) { + case SNDRV_PCM_STATE_SETUP: + if (stream->direction != SND_COMPRESS_CAPTURE) + return -EPERM; + break; + case SNDRV_PCM_STATE_PREPARED: + break; + default: return -EPERM; + } + retval = stream->ops->trigger(stream, SNDRV_PCM_TRIGGER_START); if (!retval) stream->runtime->state = SNDRV_PCM_STATE_RUNNING; -- 2.20.1