Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp5015724ybv; Mon, 17 Feb 2020 10:26:34 -0800 (PST) X-Google-Smtp-Source: APXvYqzh3cNnSZaw3d4N6ACW0KM+TJ1cJ0HFL1UIbMgt7LHhMa9WFrVlxOy2WE9lP8EUWJX/qy+P X-Received: by 2002:a05:6830:1042:: with SMTP id b2mr12888818otp.306.1581963994083; Mon, 17 Feb 2020 10:26:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581963994; cv=none; d=google.com; s=arc-20160816; b=lFn+7sTmi7YE0qZRNtiT9VnB+9PI2KsCc3aGuSKU9EegGsAYbxakOJOs9lp+MJIoAd W5nKN3PjL/uueODqPwwH4g08PVJ0kyZGqNytMD4Okxc3vh7EsWWeP86jsJtjTuyHlGK9 6vOwiDIPKoLv2rjQSqYujcU9x4jEVlkBDcYu/DfpsOmJHIyARH6CLNSWGDicmHGOdjBT xeJtiNkE0Qd/Q3vGCwqEmCpvr5uPfzxEciYKGXoIb2ttSqeC61xDFledLdChcUFuqNPB nZWmFmJkjsnUNuBbc7dXjOmMVpId3A4798c5PjVvOK43FXquMhxYQpudR8GhIx0tUu6g foAg== 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=4nIGgpR6dxPbUKvKu1GNRxbB1TO6afrCiGpP741rVUc=; b=KuCqokjaPpO3Bq7RZy+HR2Q6LYZiRPDt4Cyqv1jx/BVi5F6zBVvVc03PuxEqiec5Z9 JRd7D5jgvYCaNeVj0QKAX5N0U86KrzK9jKcxPN6sm3AnshzZvmva+tw/TlpO0lIJesXL AcLUAFC5mDTANKfzrPvKN3rDrC1tyJxp80OH1bPrzpPwjIltB1sujjWCJanTO/rZBg/V VtndE7Gp6IsGdb24ESYc9N0efPtxEW8dyJq7+UiK+nVb1lcjtKOG7uY4dn0yIlpm0f8d umu3T63nsknjda0BT0iX4l10q1UYFSi/tpLjZHCXkyfVlV/fNk3aZFmE/SErXwM+vVvo xWlA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b="FOth/oyb"; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i15si6716381oik.46.2020.02.17.10.26.21; Mon, 17 Feb 2020 10:26:34 -0800 (PST) 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=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b="FOth/oyb"; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729768AbgBQSGg (ORCPT + 99 others); Mon, 17 Feb 2020 13:06:36 -0500 Received: from mail-wr1-f66.google.com ([209.85.221.66]:32870 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726707AbgBQSGg (ORCPT ); Mon, 17 Feb 2020 13:06:36 -0500 Received: by mail-wr1-f66.google.com with SMTP id u6so20925468wrt.0 for ; Mon, 17 Feb 2020 10:06:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4nIGgpR6dxPbUKvKu1GNRxbB1TO6afrCiGpP741rVUc=; b=FOth/oybwE6qAHw51eAfFYXowWJRP1oRU/FExfez93psv5Gj5qjfSN6kJfOSkyjz4V NVNb81QmvBTEFdlF29ucdGdDwgVnxRO0yXZD95TOIkMhnvkJNe8tG1rXjG+sAD75BCW2 qwp0GQUrwiNg9YFERbyCbBi7ozKTd6DlUxquL96omY2Bjb2SjJFajgm+LzhL6FI8SxTE 17wbUIuezRS5Wr99jkcYZwkNa51UY9c8CoIqFxeJccxr3QtNvmzryk/GD+Pe9FskEoMk 1nGyeBFn19MZ/d0KecUtTsuqEuL820uKbYGtM6fzGegr2a8Gg5+Fpqp9sisr/UGzFTbW CvZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4nIGgpR6dxPbUKvKu1GNRxbB1TO6afrCiGpP741rVUc=; b=iqBCEjQefZ4lRCGf+QIAKOSiV3LSWJ8QgJaOfV1Ua7GYLB7w+vo5JC5+eIxiVxRnzo lgix82vmfSY5jkDFy/bH8Sn6MsjwqOehau54gIvuJYRZ4WfXdRPhjgpYND2WfwH7FwQR iqv3Gv2uCXZNNFUIpHjg8B2xmCJrhUPDoPlRxDa8Q3Yjrnm24M0maQijGsiVsTQDtlGe W1jLsC07BII/S6dG9Wtb+FjDqF0rVoyCoiuna5Pvy44GkOroFBnb3k+en/AR8tothgEW rNs8Ux8MmVgrJx2xgaExyNoFk7H+alAAGS6qlC8x+RSNMO3Noq+zvNX4BO3VmTD0jiLt kdUg== X-Gm-Message-State: APjAAAXv9RO1G0EkjzRNF4858SEyystBfMkBJa+xLqd2MB7MxRH1+K5n 3tQLFmQSk0E/hY8LSx8r2cHuDg== X-Received: by 2002:adf:dc86:: with SMTP id r6mr23671245wrj.68.1581962794494; Mon, 17 Feb 2020 10:06:34 -0800 (PST) Received: from starbuck.baylibre.local (laubervilliers-658-1-213-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.googlemail.com with ESMTPSA id d204sm254850wmd.30.2020.02.17.10.06.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2020 10:06:33 -0800 (PST) From: Jerome Brunet To: Marek Szyprowski , Mark Brown Cc: Jerome Brunet , alsa-devel@alsa-project.org, Liam Girdwood , linux-kernel@vger.kernel.org, linux-rpi-kernel Subject: [RFT/DONTMERGE] ASoC: devm_snd_soc_register_component fixup Date: Mon, 17 Feb 2020 19:06:26 +0100 Message-Id: <20200217180626.593909-1-jbrunet@baylibre.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20557448-d6d2-7584-e2ac-c46d337e1778@samsung.com> References: <20557448-d6d2-7584-e2ac-c46d337e1778@samsung.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Marek, would you mind trying the following patch. It should target the component removal intead of removing them all. I'd like to comfirm this is your problem before pushing in this direction. Thanks Signed-off-by: Jerome Brunet --- include/sound/soc.h | 1 + sound/soc/soc-core.c | 8 +++++++ sound/soc/soc-devres.c | 32 ++++++++++++++++++--------- sound/soc/soc-generic-dmaengine-pcm.c | 2 +- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/include/sound/soc.h b/include/sound/soc.h index f0e4f36f83bf..e5bfe2609110 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -442,6 +442,7 @@ int snd_soc_add_component(struct device *dev, const struct snd_soc_component_driver *component_driver, struct snd_soc_dai_driver *dai_drv, int num_dai); +void snd_soc_del_component(struct snd_soc_component *component); int snd_soc_register_component(struct device *dev, const struct snd_soc_component_driver *component_driver, struct snd_soc_dai_driver *dai_drv, int num_dai); diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 6a58a8f6e3c4..bf6a64fbfa52 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -2599,6 +2599,14 @@ static void snd_soc_del_component_unlocked(struct snd_soc_component *component) list_del(&component->list); } +void snd_soc_del_component(struct snd_soc_component *component) +{ + mutex_lock(&client_mutex); + snd_soc_del_component_unlocked(component); + mutex_unlock(&client_mutex); +} +EXPORT_SYMBOL_GPL(snd_soc_del_component); + int snd_soc_add_component(struct device *dev, struct snd_soc_component *component, const struct snd_soc_component_driver *component_driver, diff --git a/sound/soc/soc-devres.c b/sound/soc/soc-devres.c index a9ea172a66a7..d5e9e2bed2ce 100644 --- a/sound/soc/soc-devres.c +++ b/sound/soc/soc-devres.c @@ -11,7 +11,7 @@ static void devm_component_release(struct device *dev, void *res) { - snd_soc_unregister_component(*(struct device **)res); + snd_soc_del_component(*(struct snd_soc_component **)res); } /** @@ -28,21 +28,31 @@ int devm_snd_soc_register_component(struct device *dev, const struct snd_soc_component_driver *cmpnt_drv, struct snd_soc_dai_driver *dai_drv, int num_dai) { - struct device **ptr; - int ret; + struct snd_soc_component *component; + struct snd_soc_component **ptr; + int ret = -ENOMEM; + + component = devm_kzalloc(dev, sizeof(*component), GFP_KERNEL); + if (!component) + return -ENOMEM; ptr = devres_alloc(devm_component_release, sizeof(*ptr), GFP_KERNEL); if (!ptr) - return -ENOMEM; + goto err_devres; - ret = snd_soc_register_component(dev, cmpnt_drv, dai_drv, num_dai); - if (ret == 0) { - *ptr = dev; - devres_add(dev, ptr); - } else { - devres_free(ptr); - } + ret = snd_soc_add_component(dev, component, cmpnt_drv, dai_drv, + num_dai); + if (ret) + goto err_add; + + *ptr = component; + devres_add(dev, ptr); + return 0; +err_add: + devres_free(ptr); +err_devres: + devm_kfree(dev, component); return ret; } EXPORT_SYMBOL_GPL(devm_snd_soc_register_component); diff --git a/sound/soc/soc-generic-dmaengine-pcm.c b/sound/soc/soc-generic-dmaengine-pcm.c index 2cc25651661c..a33f21ce2d7a 100644 --- a/sound/soc/soc-generic-dmaengine-pcm.c +++ b/sound/soc/soc-generic-dmaengine-pcm.c @@ -474,7 +474,7 @@ void snd_dmaengine_pcm_unregister(struct device *dev) pcm = soc_component_to_pcm(component); - snd_soc_unregister_component(dev); + snd_soc_del_component(component); dmaengine_pcm_release_chan(pcm); kfree(pcm); } -- 2.24.1