diff mbox series

ASoC: intel: atom: Fix breakage for PCM buffer address setup

Message ID 20210819152945.8510-1-tiwai@suse.de (mailing list archive)
State Accepted
Commit 65ca89c2b12cca0d473f3dd54267568ad3af55cc
Headers show
Series ASoC: intel: atom: Fix breakage for PCM buffer address setup | expand

Commit Message

Takashi Iwai Aug. 19, 2021, 3:29 p.m. UTC
The commit 2e6b836312a4 ("ASoC: intel: atom: Fix reference to PCM
buffer address") changed the reference of PCM buffer address to
substream->runtime->dma_addr as the buffer address may change
dynamically.  However, I forgot that the dma_addr field is still not
set up for the CONTINUOUS buffer type (that this driver uses) yet in
5.14 and earlier kernels, and it resulted in garbage I/O.  The problem
will be fixed in 5.15, but we need to address it quickly for now.

The fix is to deduce the address again from the DMA pointer with
virt_to_phys(), but from the right one, substream->runtime->dma_area.

Fixes: 2e6b836312a4 ("ASoC: intel: atom: Fix reference to PCM buffer address")
Reported-and-tested-by: Hans de Goede <hdegoede@redhat.com>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/2048c6aa-2187-46bd-6772-36a4fb3c5aeb@redhat.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 sound/soc/intel/atom/sst-mfld-platform-pcm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Takashi Iwai Aug. 19, 2021, 3:35 p.m. UTC | #1
On Thu, 19 Aug 2021 17:29:45 +0200,
Takashi Iwai wrote:
> 
> The commit 2e6b836312a4 ("ASoC: intel: atom: Fix reference to PCM
> buffer address") changed the reference of PCM buffer address to
> substream->runtime->dma_addr as the buffer address may change
> dynamically.  However, I forgot that the dma_addr field is still not
> set up for the CONTINUOUS buffer type (that this driver uses) yet in
> 5.14 and earlier kernels, and it resulted in garbage I/O.  The problem
> will be fixed in 5.15, but we need to address it quickly for now.
> 
> The fix is to deduce the address again from the DMA pointer with
> virt_to_phys(), but from the right one, substream->runtime->dma_area.
> 
> Fixes: 2e6b836312a4 ("ASoC: intel: atom: Fix reference to PCM buffer address")
> Reported-and-tested-by: Hans de Goede <hdegoede@redhat.com>
> Cc: <stable@vger.kernel.org>
> Link: https://lore.kernel.org/r/2048c6aa-2187-46bd-6772-36a4fb3c5aeb@redhat.com
> Signed-off-by: Takashi Iwai <tiwai@suse.de>
> ---

Mark, as it's close to the 5.14 final, exceptionally I'd like to merge
this into my tree directly now, so that it can be certainly included
in the next PR to Linus.
(Also because the commit will be reverted on for-next again, too.)

After the merge, feel free to pull my for-linus branch into yours.


thanks,

Takashi
Mark Brown Aug. 19, 2021, 3:40 p.m. UTC | #2
On Thu, Aug 19, 2021 at 05:35:18PM +0200, Takashi Iwai wrote:

> Mark, as it's close to the 5.14 final, exceptionally I'd like to merge
> this into my tree directly now, so that it can be certainly included
> in the next PR to Linus.
> (Also because the commit will be reverted on for-next again, too.)

> After the merge, feel free to pull my for-linus branch into yours.

Acked-by: Mark Brown <broonie@kernel.org>
Takashi Iwai Aug. 19, 2021, 4:59 p.m. UTC | #3
On Thu, 19 Aug 2021 17:40:30 +0200,
Mark Brown wrote:
> 
> On Thu, Aug 19, 2021 at 05:35:18PM +0200, Takashi Iwai wrote:
> 
> > Mark, as it's close to the 5.14 final, exceptionally I'd like to merge
> > this into my tree directly now, so that it can be certainly included
> > in the next PR to Linus.
> > (Also because the commit will be reverted on for-next again, too.)
> 
> > After the merge, feel free to pull my for-linus branch into yours.
> 
> Acked-by: Mark Brown <broonie@kernel.org>

Thanks, now merged and pushed out for-linus branch, commit
65ca89c2b12cca0d473f3dd54267568ad3af55cc.


Takashi
diff mbox series

Patch

diff --git a/sound/soc/intel/atom/sst-mfld-platform-pcm.c b/sound/soc/intel/atom/sst-mfld-platform-pcm.c
index 5db2f4865bbb..905c7965f653 100644
--- a/sound/soc/intel/atom/sst-mfld-platform-pcm.c
+++ b/sound/soc/intel/atom/sst-mfld-platform-pcm.c
@@ -127,7 +127,7 @@  static void sst_fill_alloc_params(struct snd_pcm_substream *substream,
 	snd_pcm_uframes_t period_size;
 	ssize_t periodbytes;
 	ssize_t buffer_bytes = snd_pcm_lib_buffer_bytes(substream);
-	u32 buffer_addr = substream->runtime->dma_addr;
+	u32 buffer_addr = virt_to_phys(substream->runtime->dma_area);
 
 	channels = substream->runtime->channels;
 	period_size = substream->runtime->period_size;