From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Sasha Levin <sashal@kernel.org>,
"Linh Phung T . Y ." <linh.phung.jy@renesas.com>,
alsa-devel@alsa-project.org, Mark Brown <broonie@kernel.org>,
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Subject: [PATCH AUTOSEL 5.4 23/46] ASoC: rsnd: call rsnd_ssi_master_clk_start() from rsnd_ssi_init()
Date: Wed, 5 May 2021 12:38:33 -0400 [thread overview]
Message-ID: <20210505163856.3463279-23-sashal@kernel.org> (raw)
In-Reply-To: <20210505163856.3463279-1-sashal@kernel.org>
From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
[ Upstream commit a122a116fc6d8fcf2f202dcd185173a54268f239 ]
Current rsnd needs to call .prepare (P) for clock settings,
.trigger for playback start (S) and stop (E).
It should be called as below from SSI point of view.
P -> S -> E -> P -> S -> E -> ...
But, if you used MIXer, below case might happen
(2)
1: P -> S ---> E -> ...
2: P ----> S -> ...
(1) (3)
P(1) setups clock, but E(2) resets it. and starts playback (3).
In such case, it will reports "SSI parent/child should use same rate".
rsnd_ssi_master_clk_start() which is the main function at (P)
was called from rsnd_ssi_init() (= S) before,
but was moved by below patch to rsnd_soc_dai_prepare() (= P) to avoid
using clk_get_rate() which shouldn't be used under atomic context.
commit 4d230d1271064 ("ASoC: rsnd: fixup not to call clk_get/set
under non-atomic")
Because of above patch, rsnd_ssi_master_clk_start() is now called at (P)
which is for non atomic context. But (P) is assuming that spin lock is
*not* used.
One issue now is rsnd_ssi_master_clk_start() is checking ssi->xxx
which should be protected by spin lock.
After above patch, adg.c had below patch for other reasons.
commit 06e8f5c842f2d ("ASoC: rsnd: don't call clk_get_rate()
under atomic context")
clk_get_rate() is used at probe() timing by this patch.
In other words, rsnd_ssi_master_clk_start() is no longer using
clk_get_rate() any more.
This means we can call it from rsnd_ssi_init() (= S) again which is
protected by spin lock.
This patch re-move it to under spin lock, and solves
1. checking ssi->xxx without spin lock issue.
2. clk setting / device start / device stop race condition.
Reported-by: Linh Phung T. Y. <linh.phung.jy@renesas.com>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/875z0x1jt5.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
sound/soc/sh/rcar/ssi.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index 47d5ddb526f2..8926dd69e8b8 100644
--- a/sound/soc/sh/rcar/ssi.c
+++ b/sound/soc/sh/rcar/ssi.c
@@ -507,10 +507,15 @@ static int rsnd_ssi_init(struct rsnd_mod *mod,
struct rsnd_priv *priv)
{
struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
+ int ret;
if (!rsnd_ssi_is_run_mods(mod, io))
return 0;
+ ret = rsnd_ssi_master_clk_start(mod, io);
+ if (ret < 0)
+ return ret;
+
ssi->usrcnt++;
rsnd_mod_power_on(mod);
@@ -1060,13 +1065,6 @@ static int rsnd_ssi_pio_pointer(struct rsnd_mod *mod,
return 0;
}
-static int rsnd_ssi_prepare(struct rsnd_mod *mod,
- struct rsnd_dai_stream *io,
- struct rsnd_priv *priv)
-{
- return rsnd_ssi_master_clk_start(mod, io);
-}
-
static struct rsnd_mod_ops rsnd_ssi_pio_ops = {
.name = SSI_NAME,
.probe = rsnd_ssi_common_probe,
@@ -1079,7 +1077,6 @@ static struct rsnd_mod_ops rsnd_ssi_pio_ops = {
.pointer = rsnd_ssi_pio_pointer,
.pcm_new = rsnd_ssi_pcm_new,
.hw_params = rsnd_ssi_hw_params,
- .prepare = rsnd_ssi_prepare,
.get_status = rsnd_ssi_get_status,
};
@@ -1166,7 +1163,6 @@ static struct rsnd_mod_ops rsnd_ssi_dma_ops = {
.pcm_new = rsnd_ssi_pcm_new,
.fallback = rsnd_ssi_fallback,
.hw_params = rsnd_ssi_hw_params,
- .prepare = rsnd_ssi_prepare,
.get_status = rsnd_ssi_get_status,
};
--
2.30.2
WARNING: multiple messages have this Message-ID (diff)
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>,
"Linh Phung T . Y ." <linh.phung.jy@renesas.com>,
Mark Brown <broonie@kernel.org>, Sasha Levin <sashal@kernel.org>,
alsa-devel@alsa-project.org
Subject: [PATCH AUTOSEL 5.4 23/46] ASoC: rsnd: call rsnd_ssi_master_clk_start() from rsnd_ssi_init()
Date: Wed, 5 May 2021 12:38:33 -0400 [thread overview]
Message-ID: <20210505163856.3463279-23-sashal@kernel.org> (raw)
In-Reply-To: <20210505163856.3463279-1-sashal@kernel.org>
From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
[ Upstream commit a122a116fc6d8fcf2f202dcd185173a54268f239 ]
Current rsnd needs to call .prepare (P) for clock settings,
.trigger for playback start (S) and stop (E).
It should be called as below from SSI point of view.
P -> S -> E -> P -> S -> E -> ...
But, if you used MIXer, below case might happen
(2)
1: P -> S ---> E -> ...
2: P ----> S -> ...
(1) (3)
P(1) setups clock, but E(2) resets it. and starts playback (3).
In such case, it will reports "SSI parent/child should use same rate".
rsnd_ssi_master_clk_start() which is the main function at (P)
was called from rsnd_ssi_init() (= S) before,
but was moved by below patch to rsnd_soc_dai_prepare() (= P) to avoid
using clk_get_rate() which shouldn't be used under atomic context.
commit 4d230d1271064 ("ASoC: rsnd: fixup not to call clk_get/set
under non-atomic")
Because of above patch, rsnd_ssi_master_clk_start() is now called at (P)
which is for non atomic context. But (P) is assuming that spin lock is
*not* used.
One issue now is rsnd_ssi_master_clk_start() is checking ssi->xxx
which should be protected by spin lock.
After above patch, adg.c had below patch for other reasons.
commit 06e8f5c842f2d ("ASoC: rsnd: don't call clk_get_rate()
under atomic context")
clk_get_rate() is used at probe() timing by this patch.
In other words, rsnd_ssi_master_clk_start() is no longer using
clk_get_rate() any more.
This means we can call it from rsnd_ssi_init() (= S) again which is
protected by spin lock.
This patch re-move it to under spin lock, and solves
1. checking ssi->xxx without spin lock issue.
2. clk setting / device start / device stop race condition.
Reported-by: Linh Phung T. Y. <linh.phung.jy@renesas.com>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/875z0x1jt5.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
sound/soc/sh/rcar/ssi.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index 47d5ddb526f2..8926dd69e8b8 100644
--- a/sound/soc/sh/rcar/ssi.c
+++ b/sound/soc/sh/rcar/ssi.c
@@ -507,10 +507,15 @@ static int rsnd_ssi_init(struct rsnd_mod *mod,
struct rsnd_priv *priv)
{
struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
+ int ret;
if (!rsnd_ssi_is_run_mods(mod, io))
return 0;
+ ret = rsnd_ssi_master_clk_start(mod, io);
+ if (ret < 0)
+ return ret;
+
ssi->usrcnt++;
rsnd_mod_power_on(mod);
@@ -1060,13 +1065,6 @@ static int rsnd_ssi_pio_pointer(struct rsnd_mod *mod,
return 0;
}
-static int rsnd_ssi_prepare(struct rsnd_mod *mod,
- struct rsnd_dai_stream *io,
- struct rsnd_priv *priv)
-{
- return rsnd_ssi_master_clk_start(mod, io);
-}
-
static struct rsnd_mod_ops rsnd_ssi_pio_ops = {
.name = SSI_NAME,
.probe = rsnd_ssi_common_probe,
@@ -1079,7 +1077,6 @@ static struct rsnd_mod_ops rsnd_ssi_pio_ops = {
.pointer = rsnd_ssi_pio_pointer,
.pcm_new = rsnd_ssi_pcm_new,
.hw_params = rsnd_ssi_hw_params,
- .prepare = rsnd_ssi_prepare,
.get_status = rsnd_ssi_get_status,
};
@@ -1166,7 +1163,6 @@ static struct rsnd_mod_ops rsnd_ssi_dma_ops = {
.pcm_new = rsnd_ssi_pcm_new,
.fallback = rsnd_ssi_fallback,
.hw_params = rsnd_ssi_hw_params,
- .prepare = rsnd_ssi_prepare,
.get_status = rsnd_ssi_get_status,
};
--
2.30.2
next prev parent reply other threads:[~2021-05-05 16:57 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-05 16:38 [Cluster-devel] [PATCH AUTOSEL 5.4 01/46] fs: dlm: fix debugfs dump Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 02/46] tipc: convert dest node's address to network order Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 03/46] ASoC: Intel: bytcr_rt5640: Enable jack-detect support on Asus T100TAF Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 04/46] net: stmmac: Set FIFO sizes for ipq806x Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 05/46] ASoC: rsnd: core: Check convert rate in rsnd_hw_params Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 06/46] i2c: bail out early when RDWR parameters are wrong Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 07/46] ALSA: hdsp: don't disable if not enabled Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 08/46] ALSA: hdspm: " Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 09/46] ALSA: rme9652: " Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 10/46] ALSA: bebob: enable to deliver MIDI messages for multiple ports Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 11/46] Bluetooth: Set CONF_NOT_COMPLETE as l2cap_chan default Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 12/46] Bluetooth: verify AMP hci_chan before amp_destroy Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 13/46] Bluetooth: initialize skb_queue_head at l2cap_chan_create() Sasha Levin
2021-05-05 16:38 ` [Bridge] [PATCH AUTOSEL 5.4 14/46] net: bridge: when suppression is enabled exclude RARP packets Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 15/46] Bluetooth: check for zapped sk before connecting Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 16/46] ip6_vti: proper dev_{hold|put} in ndo_[un]init methods Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 17/46] ASoC: Intel: bytcr_rt5640: Add quirk for the Chuwi Hi8 tablet Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 18/46] i2c: Add I2C_AQ_NO_REP_START adapter quirk Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 19/46] mac80211: clear the beacon's CRC after channel switch Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 20/46] pinctrl: samsung: use 'int' for register masks in Exynos Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 21/46] mt76: mt76x0: disable GTK offloading Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 22/46] cuse: prevent clone Sasha Levin
2021-05-05 16:38 ` Sasha Levin [this message]
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 23/46] ASoC: rsnd: call rsnd_ssi_master_clk_start() from rsnd_ssi_init() Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 24/46] Revert "iommu/amd: Fix performance counter initialization" Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 25/46] iommu/amd: Remove performance counter pre-initialization test Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 26/46] drm/amd/display: Force vsync flip when reconfiguring MPCC Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 27/46] selftests: Set CC to clang in lib.mk if LLVM is set Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 28/46] kconfig: nconf: stop endless search loops Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 29/46] ALSA: hda/hdmi: fix race in handling acomp ELD notification at resume Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 30/46] sctp: Fix out-of-bounds warning in sctp_process_asconf_param() Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 31/46] flow_dissector: Fix out-of-bounds warning in __skb_flow_bpf_to_target() Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 32/46] powerpc/smp: Set numa node before updating mask Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 33/46] ASoC: rt286: Generalize support for ALC3263 codec Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 34/46] ethtool: ioctl: Fix out-of-bounds warning in store_link_ksettings_for_user() Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 35/46] net: sched: tapr: prevent cycle_time == 0 in parse_taprio_schedule Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 36/46] samples/bpf: Fix broken tracex1 due to kprobe argument change Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 37/46] powerpc/pseries: Stop calling printk in rtas_stop_self() Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 38/46] drm/amd/display: fixed divide by zero kernel crash during dsc enablement Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 39/46] wl3501_cs: Fix out-of-bounds warnings in wl3501_send_pkt Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 40/46] wl3501_cs: Fix out-of-bounds warnings in wl3501_mgmt_join Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 41/46] qtnfmac: Fix possible buffer overflow in qtnf_event_handle_external_auth Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 42/46] powerpc/iommu: Annotate nested lock for lockdep Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [Intel-wired-lan] [PATCH AUTOSEL 5.4 43/46] iavf: remove duplicate free resources calls Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 44/46] net: ethernet: mtk_eth_soc: fix RX VLAN offload Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 45/46] bnxt_en: Add PCI IDs for Hyper-V VF devices Sasha Levin
2021-05-05 16:38 ` [PATCH AUTOSEL 5.4 46/46] ia64: module: fix symbolizer crash on fdescr Sasha Levin
2021-05-05 16:38 ` 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=20210505163856.3463279-23-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=kuninori.morimoto.gx@renesas.com \
--cc=linh.phung.jy@renesas.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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.