From: Sasha Levin <sashal@kernel.org> To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Charles Keepax <ckeepax@opensource.cirrus.com>, Mark Brown <broonie@kernel.org>, Sasha Levin <sashal@kernel.org> Subject: [PATCH AUTOSEL 4.14 06/44] ASoC: dapm: Fix handling of custom_stop_condition on DAPM graph walks Date: Tue, 13 Aug 2019 22:17:55 -0400 Message-ID: <20190814021834.16662-6-sashal@kernel.org> (raw) In-Reply-To: <20190814021834.16662-1-sashal@kernel.org> From: Charles Keepax <ckeepax@opensource.cirrus.com> [ Upstream commit 8dd26dff00c0636b1d8621acaeef3f6f3a39dd77 ] DPCM uses snd_soc_dapm_dai_get_connected_widgets to build a list of the widgets connected to a specific front end DAI so it can search through this list for available back end DAIs. The custom_stop_condition was added to is_connected_ep to facilitate this list not containing more widgets than is necessary. Doing so both speeds up the DPCM handling as less widgets need to be searched and avoids issues with CODEC to CODEC links as these would be confused with back end DAIs if they appeared in the list of available widgets. custom_stop_condition was implemented by aborting the graph walk when the condition is triggered, however there is an issue with this approach. Whilst walking the graph is_connected_ep should update the endpoints cache on each widget, if the walk is aborted the number of attached end points is unknown for that sub-graph. When the stop condition triggered, the original patch ignored the triggering widget and returned zero connected end points; a later patch updated this to set the triggering widget's cache to 1 and return that. Both of these approaches result in inaccurate values being stored in various end point caches as the values propagate back through the graph, which can result in later issues with widgets powering/not powering unexpectedly. As the original goal was to reduce the size of the widget list passed to the DPCM code, the simplest solution is to limit the functionality of the custom_stop_condition to the widget list. This means the rest of the graph will still be processed resulting in correct end point caches, but only widgets up to the stop condition will be added to the returned widget list. Fixes: 6742064aef7f ("ASoC: dapm: support user-defined stop condition in dai_get_connected_widgets") Fixes: 5fdd022c2026 ("ASoC: dpcm: play nice with CODEC<->CODEC links") Fixes: 09464974eaa8 ("ASoC: dapm: Fix to return correct path list in is_connected_ep.") Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://lore.kernel.org/r/20190718084333.15598-1-ckeepax@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org> --- sound/soc/soc-dapm.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index b4c8ba412a5c1..104d5f487c7d1 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -1152,8 +1152,8 @@ static __always_inline int is_connected_ep(struct snd_soc_dapm_widget *widget, list_add_tail(&widget->work_list, list); if (custom_stop_condition && custom_stop_condition(widget, dir)) { - widget->endpoints[dir] = 1; - return widget->endpoints[dir]; + list = NULL; + custom_stop_condition = NULL; } if ((widget->is_ep & SND_SOC_DAPM_DIR_TO_EP(dir)) && widget->connected) { @@ -1190,8 +1190,8 @@ static __always_inline int is_connected_ep(struct snd_soc_dapm_widget *widget, * * Optionally, can be supplied with a function acting as a stopping condition. * This function takes the dapm widget currently being examined and the walk - * direction as an arguments, it should return true if the walk should be - * stopped and false otherwise. + * direction as an arguments, it should return true if widgets from that point + * in the graph onwards should not be added to the widget list. */ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget, struct list_head *list, -- 2.20.1
next prev parent reply index Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-08-14 2:17 [PATCH AUTOSEL 4.14 01/44] iio: adc: max9611: Fix misuse of GENMASK macro Sasha Levin 2019-08-14 2:17 ` [PATCH AUTOSEL 4.14 02/44] HID: Add 044f:b320 ThrustMaster, Inc. 2 in 1 DT Sasha Levin 2019-08-14 2:17 ` [PATCH AUTOSEL 4.14 03/44] MIPS: kernel: only use i8253 clocksource with periodic clockevent Sasha Levin 2019-08-14 2:17 ` [PATCH AUTOSEL 4.14 04/44] mips: fix cacheinfo Sasha Levin 2019-08-14 2:17 ` [PATCH AUTOSEL 4.14 05/44] netfilter: ebtables: fix a memory leak bug in compat Sasha Levin 2019-08-14 2:17 ` Sasha Levin [this message] 2019-08-14 2:17 ` [PATCH AUTOSEL 4.14 07/44] bonding: Force slave speed check after link state recovery for 802.3ad Sasha Levin 2019-08-14 2:17 ` [PATCH AUTOSEL 4.14 08/44] can: dev: call netif_carrier_off() in register_candev() Sasha Levin 2019-08-14 2:17 ` [PATCH AUTOSEL 4.14 09/44] ASoC: Fail card instantiation if DAI format setup fails Sasha Levin 2019-08-14 2:17 ` [PATCH AUTOSEL 4.14 10/44] st21nfca_connectivity_event_received: null check the allocation Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 11/44] st_nci_hci_connectivity_event_received: " Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 12/44] ASoC: ti: davinci-mcasp: Correct slot_width posed constraint Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 13/44] net: usb: qmi_wwan: Add the BroadMobi BM818 card Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 14/44] qed: RDMA - Fix the hw_ver returned in device attributes Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 15/44] isdn: mISDN: hfcsusb: Fix possible null-pointer dereferences in start_isoc_chain() Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 16/44] netfilter: ipset: Fix rename concurrency with listing Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 17/44] netfilter: ebtables: also count base chain policies Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 18/44] driver core: Fix use-after-free and double free on glue directory Sasha Levin 2019-08-14 7:37 ` Greg Kroah-Hartman 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 19/44] isdn: hfcsusb: Fix mISDN driver crash caused by transfer buffer on the stack Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 20/44] perf bench numa: Fix cpu0 binding Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 21/44] Input: kbtab - sanity check for endpoint type Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 22/44] net: usb: pegasus: fix improper read if get_registers() fail Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 23/44] can: sja1000: force the string buffer NULL-terminated Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 24/44] can: peak_usb: " Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 25/44] net/ethernet/qlogic/qed: " Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 26/44] NFSv4: Fix a potential sleep while atomic in nfs4_do_reclaim() Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 27/44] HID: holtek: test for sanity of intfdata Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 28/44] HID: input: fix a4tech horizontal wheel custom usage Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 29/44] SMB3: Kernel oops mounting a encryptData share with CONFIG_DEBUG_VIRTUAL Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 30/44] HID: hiddev: avoid opening a disconnected device Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 31/44] HID: hiddev: do cleanup in failure of opening a device Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 32/44] Input: iforce - add sanity checks Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 33/44] net: cxgb3_main: Fix a resource leak in a error path in 'init_one()' Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 34/44] net: hisilicon: make hip04_tx_reclaim non-reentrant Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 35/44] net: hisilicon: fix hip04-xmit never return TX_BUSY Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 36/44] net: hisilicon: Fix dma_map_single failed on arm64 Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 37/44] libata: have ata_scsi_rw_xlat() fail invalid passthrough requests Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 38/44] libata: add SG safety checks in SFF pio transfers Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 39/44] x86/lib/cpu: Address missing prototypes warning Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 40/44] drm/vmwgfx: fix memory leak when too many retries have occurred Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 41/44] perf ftrace: Fix failure to set cpumask when only one cpu is present Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 42/44] perf cpumap: Fix writing to illegal memory in handling cpumap mask Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 43/44] perf pmu-events: Fix missing "cpu_clk_unhalted.core" event Sasha Levin 2019-08-14 2:18 ` [PATCH AUTOSEL 4.14 44/44] selftests: kvm: Adding config fragments Sasha Levin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190814021834.16662-6-sashal@kernel.org \ --to=sashal@kernel.org \ --cc=broonie@kernel.org \ --cc=ckeepax@opensource.cirrus.com \ --cc=linux-kernel@vger.kernel.org \ --cc=stable@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Stable Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/stable/0 stable/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 stable stable/ https://lore.kernel.org/stable \ stable@vger.kernel.org public-inbox-index stable Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.stable AGPL code for this site: git clone https://public-inbox.org/public-inbox.git