[alsa-devel] Applied "ASoC: rsnd: ssi: fix race condition in rsnd_ssi_pointer_update" to the asoc tree
Takashi Sakamoto
o-takashi at sakamocchi.jp
Sat Dec 9 06:22:50 CET 2017
Hi Mark,
On Dec 9 2017 03:52, Mark Brown wrote:
> The patch
>
> ASoC: rsnd: ssi: fix race condition in rsnd_ssi_pointer_update
>
> has been applied to the asoc tree at
>
> https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
The applied patches are in v1 patchset, but we have v2 patchset already:
http://mailman.alsa-project.org/pipermail/alsa-devel/2017-December/128970.html
Would you please replace the applied patches with the renewed ones?
There're slight differences between them.
> All being well this means that it will be integrated into the linux-next
> tree (usually sometime in the next 24 hours) and sent to Linus during
> the next merge window (or sooner if it is a bug fix), however if
> problems are discovered then the patch may be dropped or reverted.
>
> You may get further e-mails resulting from automated or manual testing
> and review of the tree, please engage with people reporting problems and
> send followup patches addressing any issues that are reported if needed.
>
> If any updates are required or you are submitting further changes they
> should be sent as incremental updates against current git, existing
> patches will not be replaced.
>
> Please add any relevant lists and maintainers to the CCs when replying
> to this mail.
>
> Thanks,
> Mark
>
>>From 33f801366bdf3f8b67dfe325b84f4051a090d01e Mon Sep 17 00:00:00 2001
> From: Jiada Wang <jiada_wang at mentor.com>
> Date: Thu, 7 Dec 2017 22:15:38 -0800
> Subject: [PATCH] ASoC: rsnd: ssi: fix race condition in
> rsnd_ssi_pointer_update
>
> Currently there is race condition between set of byte_pos and wrap
> it around when new buffer starts. If .pointer is called in-between
> it will result in inconsistent pointer position be returned
> from .pointer callback.
>
> This patch increments buffer pointer atomically to avoid this issue.
>
> Signed-off-by: Jiada Wang <jiada_wang at mentor.com>
> Reviewed-by: Takashi Sakamoto <takashi.sakamoto at miraclelinux.com>
> Acked-by: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
> Signed-off-by: Mark Brown <broonie at kernel.org>
> ---
> sound/soc/sh/rcar/ssi.c | 16 ++++++++++------
> 1 file changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
> index fece1e5f582f..cbf3bf312d23 100644
> --- a/sound/soc/sh/rcar/ssi.c
> +++ b/sound/soc/sh/rcar/ssi.c
> @@ -446,25 +446,29 @@ static bool rsnd_ssi_pointer_update(struct rsnd_mod *mod,
> int byte)
> {
> struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
> + bool ret = false;
> + int byte_pos;
>
> - ssi->byte_pos += byte;
> + byte_pos = ssi->byte_pos + byte;
>
> - if (ssi->byte_pos >= ssi->next_period_byte) {
> + if (byte_pos >= ssi->next_period_byte) {
> struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
>
> ssi->period_pos++;
> ssi->next_period_byte += ssi->byte_per_period;
>
> if (ssi->period_pos >= runtime->periods) {
> - ssi->byte_pos = 0;
> + byte_pos = 0;
> ssi->period_pos = 0;
> ssi->next_period_byte = ssi->byte_per_period;
> }
>
> - return true;
> + ret = true;
> }
>
> - return false;
> + WRITE_ONCE(ssi->byte_pos, byte_pos);
> +
> + return ret;
> }
>
> /*
> @@ -838,7 +842,7 @@ static int rsnd_ssi_pointer(struct rsnd_mod *mod,
> struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
> struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
>
> - *pointer = bytes_to_frames(runtime, ssi->byte_pos);
> + *pointer = bytes_to_frames(runtime, READ_ONCE(ssi->byte_pos));
>
> return 0;
> }
Thanks
Takashi Sakamoto
More information about the Alsa-devel
mailing list