Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp3517495pxb; Wed, 13 Oct 2021 07:36:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzA5G+DDHsH9KHzRHUfI9EUv2zUD4QybfY+hXy4C5ZI+PNwIl9xViBYxaG38DD0nMyRzDch X-Received: by 2002:a63:6c02:: with SMTP id h2mr13540519pgc.173.1634135766712; Wed, 13 Oct 2021 07:36:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634135766; cv=none; d=google.com; s=arc-20160816; b=ltfclPp2+MSnexpoe9ma1NXAsmpG7z2e1RpXGMTwcGrD3PrLwY1xf/W/+IvtGeUIbG V3qu1dOzEGIcXh2M1q+ev8+w3L42zPUN1vrZNOWFaCLSztQZo6KC0Diw/10lQ8aR99Sf 6Vbnp+tgUmliulMK4HbXlEwiKOZMDmn0PvEJilMiAKdqmliP1Bob9tdeXwuaRuyhmS/s Z8qiXRkj2ZQDksVuQAMDguvp86qI1GtwM4ZyRtp9LiXTYJzOZjHL0V39oDtkuu/8cFMS iDN+29DLWJ3xEG37+J849BvaQlU8/PKsuVt3wFmBPLqj6rT+qFDpQoTgW43mkBN3FH5b pSZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=z/nz4BNa2cN3RxC74XpD2lZRpKCmGWeMLIiwl4WDXTQ=; b=RxV24hag3lHgRE0JVNd397vx1GWfnbL6W1utx6hGNqwoibgSs53Ye7v3p3mOYVQc7I /MCwVk6AtCGbeIr/fG03+eCKBSsGoWUnPtTi920Zjru91K9X7bmeJGu2YapHdA6dP8C0 q9/dJJKredlRMLA1XwZ6fTkUsp5ia5MeuTUAuH1O8o9svlwozocEevx6z6+BCxSnKnnd y4Nb/v/vSCmXu7+C34XxSNvpd2Z85CiUivfO2pPPmqc+9dxBIhYqmrtTUOOAw7jm8rfY vPn9ky7GPhQ5yQROdGIkU6S6EmYEfnP3MgL2t7Ziy8wE7XroYZOiEQqJ99UX1JvRgy1q y9AA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c17si18394072pls.182.2021.10.13.07.35.53; Wed, 13 Oct 2021 07:36:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233774AbhJMOeW (ORCPT + 99 others); Wed, 13 Oct 2021 10:34:22 -0400 Received: from mga12.intel.com ([192.55.52.136]:5099 "EHLO mga12.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236976AbhJMOdm (ORCPT ); Wed, 13 Oct 2021 10:33:42 -0400 X-IronPort-AV: E=McAfee;i="6200,9189,10135"; a="207554843" X-IronPort-AV: E=Sophos;i="5.85,371,1624345200"; d="scan'208";a="207554843" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Oct 2021 07:31:14 -0700 X-IronPort-AV: E=Sophos;i="5.85,371,1624345200"; d="scan'208";a="524649524" Received: from ssafavib-mobl.amr.corp.intel.com (HELO pbossart-mobl3.intel.com) ([10.209.164.198]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Oct 2021 07:31:12 -0700 From: Pierre-Louis Bossart To: alsa-devel@alsa-project.org Cc: tiwai@suse.de, broonie@kernel.org, vkoul@kernel.org, Sameer Pujar , Gyeongtaek Lee , Peter Ujfalusi , Kuninori Morimoto , Pierre-Louis Bossart , Liam Girdwood , Jaroslav Kysela , Takashi Iwai , linux-kernel@vger.kernel.org (open list) Subject: [RFC PATCH v3 05/13] ASoC: soc-pcm: align BE 'atomicity' with that of the FE Date: Wed, 13 Oct 2021 09:30:42 -0500 Message-Id: <20211013143050.244444-6-pierre-louis.bossart@linux.intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211013143050.244444-1-pierre-louis.bossart@linux.intel.com> References: <20211013143050.244444-1-pierre-louis.bossart@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Since the flow for DPCM is based on taking a lock for the FE first, we need to make sure during the connection between a BE and an FE that they both use the same 'atomicity', otherwise we may sleep in atomic context. If the FE is nonatomic, this patch forces the BE to be nonatomic as well. That should have no negative impact since the BE 'inherits' the FE properties. However, if the FE is atomic and the BE is not, then the configuration is flagged as invalid. Signed-off-by: Pierre-Louis Bossart --- sound/soc/soc-pcm.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index 52851827d53f..f22bbf95319d 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -1151,13 +1151,33 @@ static snd_pcm_uframes_t soc_pcm_pointer(struct snd_pcm_substream *substream) static int dpcm_be_connect(struct snd_soc_pcm_runtime *fe, struct snd_soc_pcm_runtime *be, int stream) { + struct snd_pcm_substream *fe_substream; + struct snd_pcm_substream *be_substream; struct snd_soc_dpcm *dpcm; /* only add new dpcms */ + snd_soc_dpcm_fe_lock_irq(fe, stream); for_each_dpcm_be(fe, stream, dpcm) { - if (dpcm->be == be && dpcm->fe == fe) + if (dpcm->be == be && dpcm->fe == fe) { + snd_soc_dpcm_fe_unlock_irq(fe, stream); return 0; + } + } + fe_substream = snd_soc_dpcm_get_substream(fe, stream); + be_substream = snd_soc_dpcm_get_substream(be, stream); + + if (!fe_substream->pcm->nonatomic && be_substream->pcm->nonatomic) { + dev_err(be->dev, "%s: FE is atomic but BE is nonatomic, invalid configuration\n", + __func__); + snd_soc_dpcm_fe_unlock_irq(fe, stream); + return -EINVAL; } + if (fe_substream->pcm->nonatomic && !be_substream->pcm->nonatomic) { + dev_warn(be->dev, "%s: FE is nonatomic but BE is not, forcing BE as nonatomic\n", + __func__); + be_substream->pcm->nonatomic = 1; + } + snd_soc_dpcm_fe_unlock_irq(fe, stream); dpcm = kzalloc(sizeof(struct snd_soc_dpcm), GFP_KERNEL); if (!dpcm) -- 2.25.1